SQL (二)排序检索出来的数据(select语句的order by子句)


之前只用select语句检索一列,但是没排序
在这里插入图片描述

order by子句

在这里插入图片描述
在这里插入图片描述

对一列排序

按照产品名字排序(字符串排序,根据ascii码)

select prod_name 
from products
order by prod_name;

在这里插入图片描述

也可以不用被选列的名字作为order by子句的列,即不根据被显示列本身来排序:

根据价格对产品排序

select prod_name 
from products
order by prod_price;

在这里插入图片描述

对多个列按照多个标准排序

select prod_id, prod_price, prod_name
from products
order by prod_price, prod_name;

选择了三列数据,先用价格排序,价格相同的再根据名称排序。如果所有行的价格都不一样,则不会用到名称排序。
在这里插入图片描述
这里还有一种简单的写法:

select prod_id, prod_price, prod_name
from products
order by 2, 3;

order by2, 3表示先按显示的第2列排序,再按照第三列排序,即先按照价格排序再按照名称排序,因此和上面的代码的效果一样。

这样做的好处是:不用输入列名
坏处是:

  • 容易出错,列位置给错了,列很多的时候容易给错,其次如果清单更改了,列位置可能就不一样了
  • 如果排序规则列不在select清单中,就根本没法用这个方法。

综上,还是老实写列名吧,保险。

指定排序方向(升序 or 降序,DESC关键字)

默认都是升序
在这里插入图片描述

select prod_id, prod_price, prod_name
from products
order by prod_price desc;

在这里插入图片描述

如果用多个列排序:

select prod_id, prod_price, prod_name
from products
order by prod_price desc, prod_name;

可以看到价格相同的产品按照产品名称升序排序,说明DESC关键字只作用于它前面的列名。(和distinct不同,distinct作用于后面的所有列名)
在这里插入图片描述
在这里插入图片描述

即上面代码和下面的等价:

select prod_id, prod_price, prod_name
from products
order by prod_price desc, prod_name asc;

asc升序指定不指定都行,因为是默认的
在这里插入图片描述

总结

  • order by子句必须是select语句的最后一条子句。
  • 可以用多个列来排序

关键字

  • desc
  • asc
  • order by
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值