MySQL 执行过程

MySQL 执行过程

select xx from xx where  xx group by xx having xx ordey by xx limit xx

SELECT `name`,COUNT(`name`) AS num FROM student WHERE grade < 60 GROUP BY `name` HAVING num >= 2 ORDER BY num DESC,`name` ASC LIMIT 0,2;

主表结构:

主表结构


过程:

1、执行where 条件语句 生成临时表

等价于执行:

         select id ,name,subject,grade from student where grade < 60;

生成临时表a1的数据:

where 条件执行结果

2、对生成的临时表a1进行分组操作

1)等价于:先将临时表a1按name进行分组查询,生成多个临时表

select id ,name,subject,grade from a1 where  `name` =’aom‘

临时表 b1

select id ,name,subject,grade from a1 where  `name` =’jack‘

临时表b2

select id ,name,subject,grade from a1 where  `name` =’susan‘

临时表b3

select id ,name,subject,grade from a1 where  `name` =’rajo‘

临时表b4

2)在对每个临时表进行字段查询并合并结果

select `name`,count(`name`) as num from b1;

select `name`,count(`name`) as num from b2;

select `name`,count(`name`) as num from b3;

select `name`,count(`name`) as num from b4;

临时表c1

3、对生成的临时表c1进行having条件查询

因为此时已对表字段进行查询,所以having后条件可以直接使用别名,而where语句不行

SELECT `name`,COUNT(`name`) AS num FROM student WHERE grade < 60 GROUP BY `name` HAVING num >= 2 ;



临时表d1

4、对临时表进行排序查询

5、最好执行limit


结果

执行顺序:
where 查询条件 ——> group分组 ——> 执行查询字段,包含聚合函数查询 ——>having 条件查询 ——> order排序 ——> limit 


参考:https://www.cnblogs.com/fanguangdexiaoyuer/p/10268570.html

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容