书写顺序:
SELECT →FROM → JOIN → ON → WHERE → GROUP BY → HAVING → ORDER BY→ LIMIT
执行顺序:
FROM → ON → JOIN → WHERE → GROUP BY → HAVING → SELECT →DISTINCT → ORDER BY→ LIMIT
执行顺序:
1.from 加载from关键词后的表,计算笛卡尔积,生成虚拟表vt1
2.筛选关联表中满足on表达式的数据,保留主表数据,生成虚拟表vt2
join表示要关联的表,on代表连接条件
3.外连接,执行on会将主表中不符合on条件的数据也加载进来作为外部行
4.from子句涉及多张表,则重复1-3,直至所有的表都加载完毕,更新虚拟表vt3
5.执行where表达式,筛选数据生成表达式vt5
6.执行group by子句分组,分组会把子句组合成唯一值,且每个唯一值只包含一行,生成虚拟表vt5
这一步开始才可以使用select中的别名,它返回的是一个游标,而不是一张表,
在where中不可以使用select中的别名,而having却可以。
7.执行聚合函数,生成虚拟表vt6
8.执行having,筛选数据并生成vt7
9.执行select,筛选vt7数据并生成vt8
10.执行distinct,去重vt8并生成vt9
11.order by 排序vt9 耗费资源
12执行limit并返回