mysql学习笔记-数据排序

按照单个列排序

语句:SELECT prod_name FROM Products ORDER BY prod_name;

输出结果:
prod_name
————————
12 inch teddy bear
18 inch teddy bear
8 inch teddy bear
Bird bean bag toy
Fish bean bag toy
King doll
Queen doll
Rabbit bean bag toy
Raggedy Ann

ORDER BY子句必须是SELECT语句中最后一条子句,也就是order by必须要放在一条select语句的最后面,order by后面要跟着需要排序的列名。通常,ORDER BY子句中使用的列将是为显示而选择的列。但是,实际上并不一定要这样,用非查询的列排序数据也是可以的,比如上述语句的order by可以用prod_price来排序,即使没有查询这个列。

按照多个列排序

语句:SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price, prod_name;

输出结果:

prod_idprod_priceprod_name
BNBG023.4900Bird bean bag toy
BNBG013.4900Fish bean bag toy
BNBG033.4900Rabbit bean bag toy
RGAN014.9900Raggedy Ann
BR015.99008 inch teddy bear
BR028.990012 inch teddy bear
RYL019.4900King doll
RYL029.4900Queen doll
BR0311.990018 inch teddy bear

要按多个列排序,在order by后面简单指定多个列名,列名之间用逗号分开即可(就像选择多个列时那样)。各个列的排序优先级是,先按照第一个列排序,如果第一个列中有的很多的值有多个相同的值,那这些相同值的所在行再按照第二个列取排列,以此类推。对于上述例子中的输出,仅在多个行具有相同的prod_price值时才对产品按prod_name进行排序。如果prod_price列中所有的值都是唯一的,则不会按prod_name排序。

按列位置排序

语句:SELECT prod_id, prod_price, prod_name FROM Products ORDER BY 2, 3;

输出结果:

prod_idprod_priceprod_name
BNBG023.4900Bird bean bag toy
BNBG013.4900Fish bean bag toy
BNBG033.4900Rabbit bean bag toy
RGAN014.9900Raggedy Ann
BR015.99008 inch teddy bear
BR028.990012 inch teddy bear
RYL019.4900King doll
RYL029.4900Queen doll
BR0311.990018 inch teddy bear

SELECT清单中指定的是选择列的相对位置而不是列名。ORDER BY 2表示按SELECT清单中的第二个列prod_name进行排序。ORDER BY 2,3表示先按prod_price,再按prod_name进行排序。
但是这个用法很可能因为列名不明确而造成数据失去准确性,显然,当根据不出现在SELECT清单中的列进行排序时,不能用这个方法。但是,如果有需要,可以混合匹配使用实际列名和相对列位置。

order by的排序方向

升序(asc):是order by的默认排序

语句及输出结果参考上面的语句和结果

降序(desc):

语句:SELECT prod_id, prod_price, prod_name FROM Products ORDER BY prod_price DESC, prod_name;

输出结果:

prod_idprod_priceprod_name
BR0311.990018 inch teddy bear
RYL019.4900King doll
RYL029.4900Queen doll
BR028.990012 inch teddy bear
BR015.99008 inch teddy bear
RGAN014.9900Raggedy Ann
BNBG023.4900Bird bean bag toy
BNBG013.4900Fish bean bag toy
BNBG033.4900Rabbit bean bag toy

DESC关键字只应用到直接位于其前面的列名。在这个语句中,只对prod_price列指定DESC,对prod_name列不指定。因此,prod_price列以降序排序,而prod_name列(在每个价格内)仍然按标准的升序排序。

注意:如果想在多个列上进行降序排序,必须对order by后面的每一列都指定DESC关键字。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值