MySQL中的ORDER BY

MySQL中的ORDER BY

​ 当我们使用SELECT语句查询某个数据库的单个列时,如果不排序,数据一般将以它在底层表中出现的顺序显示。这可以是数据最初添加到表中的顺序。但是,如果数据后来进行过更新或删除,则此顺序将会收到MySQL重用回收存储空间的影响。因此,如果不明确控制的话,不能(也不应该)依赖该排序顺序。关系数据库设计理论认为,如果不明确规定排序顺序,则不应该假定检索出的数据的顺序有意义。

​ 为了明确地排序用SELECT语句检索出的数据,可以使用ORDER BY子句。ORDER BY子句取一个或多个列的名字,据此对输出进行排序。

​ 假设我们有这样的一张学生信息表如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Me2o6iPM-1637052007578)(C:\Users\61689\AppData\Roaming\Typora\typora-user-images\image-20211116160720476.png)]

​ 首先只用SELECT语句来查询学生的年龄信息:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AZdU8Am1-1637052007582)(C:\Users\61689\AppData\Roaming\Typora\typora-user-images\image-20211116160822269.png)]

​ 我们可以看到,在没有对检索出的数据进行排序的情况下,显示的就是我们最初将数据添加到表中的顺序。

​ 然后我们使用ORDER BY子句对检索的结果进行排序:

​ 我们可以看到,检索的结果进行了一个升序的排序。在默认情况下ORDER BY对检索的结果进行升序(ASC)排序,我们也可以把它改为降序(DESC)排序:

​ 但是,在大多数情况下我们需要按不止一个列进行数据的排序,这时也可以使用ORDER BY子句进行排序。例如我们想要对学生先按班级排序,同一个班级中的学生再按年龄排序:

​ 可以看到,检索到的数据先按照班级升序对学生进行了排序,对于同一个班级的学生,按照年龄的升序再进行排序。

​ 同理,我们也可以先进行班级的升序排序,再进行年龄的降序排序:

​ 综上我们可以知道,ORDER BY子句可以对一个或多个列进行升序或降序的排序,并且ASC和DESC只对直接位于它前面的列名起作用。

​ ORDER BY子句还可以和LIMIT一起使用,由此可以找出检索结果中的最大值或者最小值。比如我们可以找到所有学生中年龄最小的同学:

​ 注意:在给出ORDER BY子句时,应该保证它位于FROM子句之后。如果使用LIMIT,那么LIMIT必须位于ORDER BY之后。使用子句的次序不对将产生错误信息。那么LIMIT必须位于ORDER BY之后。使用子句的次序不对将产生错误信息。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值