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 ,执行聚促函数