Mysql select查询执行过程

SQL Select语句完整的执行顺序:  

      1、from 子句组装来自不同表的数据,包括join 、left join ; 全字段组装

       2、where  子句基于指定的条件对记录进行筛选

       3、group by  子句将数据划分为多个分组

       4、执行select 中的聚促函数,例如count(*),Max(),min()函数

       5、执行order by

       6、执行select,删除多余的字段,并且选定变为别名

       7、执行having 语句

       8、执行limit


假定现在有2张表 ,用户表 和 用户成绩表 ,数据如下

用户表 user                                                                                                   用户成绩表


         


例子 1:  查出所有成绩都在60分以上的,平均分最高的学生名称 ,  并且未删除(is_deleted = 0)

SQL :


分析 : (默认 join 在 where之前 ,这个没法分析判断

1、where中可以带有  select中未明确标出的字段,表示where查询的时候,join的是所有字段的笛卡尔积

2、如果在having中带有a.is_deleted=0会报错,但是在order by中不会报错 ,说明 order by >select  字段过滤>having

3、在 where中加上 min(b.score)> 60  会报错,说明先where 然后再 group by ,执行聚促函数


猜你喜欢

转载自blog.csdn.net/xubo_ob/article/details/71080801