M151****2366

2020-06-03   阅读量: 5124

Mysql

完整的SQL语句执行顺序及个人理解

扫码加入数据分析学习群

对上图解释如下:

对于一个最完整的sql查询语句,也就包含上述这几步。我们只有清楚的知道每个关键字后面sql语句的执行顺序,才能够写对、写好sql代码。

1、对于一个完整的sql语句来说,执行的入囗是from,也就是说,底层首先取出from后面的这张表。假如存在表连接,就取出该表与其他表join之后的一张大表。

可以看到,如果语句中存在where语句,底层会执行第一次筛选(分组前筛选),筛选的表,就是from后面最先取出的那张表。

我们进行上述一系列操作后,返回的结果集,称之为"结果集1";

2、针对第一步操作得到的结果集1,我们使用group by关键字,针对表中一个或者多个字段,进行分组。此时,系统内部会将分组字段相同的行拼揍在一起,这样在你脑海中可以想象出,一个表被分成了一张张不同的小
表。

我们将上述一系列操作后,返回的结果集,称之为"结果集2";

3、针对第二步操作得到的结果集2,我们可以使用聚合函数max、min、avg、sum、count进行操作。

但是这一步需要注意的是:进行group up分组后,后面展示的字段只能是分组字段和聚合函数。

我们将上述一系列操作后,返回的结果集,称之为"结果集3";

4、针对第三步操作得到的结果集3,可以进行第二次筛选(分组后筛选),因此,在having后面,我们可以使用

select后面写的聚合函数作为筛选依据。

我们将上述一系列操作后,返回的结果集,称之为"结果集4";

5、针对第四步操作得到的结果集4,我们可以使用order by进行排序,asc表示升序,desc表示降序。

我们将上述一系列操作后,返回的结果集,称之为"结果集5";

6、针对第五步操作得到的结果集5,我们借助于limit关键字,进行限制输出,得到我们最终想要的结果。

关于select和having执行顺序谁前谁后的说明:

关于这两个关键字的执行顺序,我查过很多资料,大部分说having的执行顺序在前,select的执行顺序在后,但也有地方说select的执行顺序先于having。而对于我来说,最开始听到的就是select先于having执行的。

我目前理解的也是后者,你发现一个问题没有,在select后面写的聚合函数,取得别名,我们可以直接在having中使用,比如说select count(*) as counts,在having中就可以直接使用having counts>5;类似这样的筛选语句。假如说,having先于select执行,那么你是怎么知道select后面这个别名取得到底是什么?咱们可没有未卜先知的功能。

添加CDA认证专家【维克多阿涛】,微信号:【cdashijiazhuang】,提供数据分析指导及CDA考试秘籍。已助千人通过CDA数字化人才认证。欢迎交流,共同成长!
18.1124 5 2 关注作者 收藏

评论(2)

小懒爱科比
2020-06-04
清楚明了~
0.0000 0 0 回复
是微微呀!
2020-06-03
好用心啊!!
0.0211 1 0 回复
M151****2366
2020-06-03
嘻嘻
0.0000 0 0 回复

推荐课程