MySQL查询语句的执行顺序及常见关键字简要理解

查询

执行顺序

https://blog.jooq.org/2016/12/09/a-beginners-guide-to-the-true-order-of-sql-operations/

个人觉得这个链接的文章写得很好,建议阅读英文。关于执行顺序的描述在标题Can this ever be understood?之下。下面我只列出了自己常用的那些,而完整的执行顺序在这个链接的文章里都有。

  1. from
  2. where
  3. group by
  4. 聚集函数
  5. having
  6. select
  7. distinct
  8. union
  9. order by
  10. limit
select count(distinct Sno) from sc;
执行聚集函数的时候会先执行里面的东西,相当于执行了select distinct Sno
这里只是个人理解,只是为了想的时候方便一些,细究的话它可能是错的,但这样“想”似乎没有问题

别名

别名可用as指定,as可以省略,省略后使用空格隔开原名和别名

  • 每步都可以使用表别名

  • group by 开始可以使用字段别名

where

where可以想成是一个循环,为真就选择,为假就不选

这对于理解sleep()有好处,在下面一篇里我有关于sleep()理解的简单例子https://blog.csdn.net/m0_49269559/article/details/108088717

distinct

去掉重复行

select distinct Sno from sc;
  • distinct 只能放在所有字段的最前面
  • 如果distinct后面有多个字段,则会把这些字段作为整体来去重

group by

分组

select Cno,count(Sno),Grade from sc group by Cno;
  • 聚集函数会对每一组的象集执行操作

逻辑参考:

这里纯粹只是逻辑上的参考,未必是底层的实际操作,但这样来“想”还没有遇到过问题

设sc表如下

SnoCnoGrade
201215121192
201215121285
201215121388
201215122290
201215122380
201215123470

group by Cno:

Cno
1
2
3
4

count(Sno):

count(Sno)
1
2
2
1

新表:

SnoCnoGradecount(Sno)
2012151211921
2012151212852
2012151213882
2012151234701

查询结果:

Cnocount(Sno)Grade
1192
2285
3288
4170

having

选择

select Sno from sc group by Sno having count(*)>=3;
  • having中可以有聚集函数
  • 书写顺序:where group by having

union

并操作

  • 字段数要相同
  • 字段名以最前面的查询为准
  • union去重
  • union all不去重

order by

排序

select Sno,Grade from sc where Cno='3' order by Grade desc;
  • 升序asc,降序desc;默认为升序
  • 可以写order by 1
  • 对于空值,排序时显示的次序由具体系统实现来决定

limit

查询bjb表n号元组开始的m行

select * from bjb limit 0,3;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值