学习 准备 尝试 谨慎小心

0%

MySQL 中 SQL 执行顺序

SQL 执行顺序

以下内容摘抄在 《MySQL技术内幕:SQL编程》一书

1
(7)SELECT8DISTINCT <select_list>
2
1FROM <left_table>
3
3)<join_type> JOIN <right_table>
4
2ON <join_condition>
5
4WHERE <where_condition>
6
5GROUP BY <group_by_list>
7
6HAVING <having_condition>
8
9ORDER BY <order_by_list>
9
10LIMIT <limit_number>

(1)FROM:对 FROM 子句中的 执行笛卡儿积,产生虚拟表 VT1
(2)ON:对虚拟表 VT1 应用 ON 筛选,只有符合 的行才被插入虚拟表 VT2中
(3)JOIN:如果指定了 OUTER JOIN (如 LEFT OUTER JOIN、RIGHT OUTER JOIN),那么保留表中未匹配的行作为外部行添加到虚拟表 VT2 中,产生虚拟表 VT3。如果 FROM 子句包含两个以上的表,则对上一个连接生成的结果表 VT3 和下一个表重复执行步骤(1)—步骤(3),直到处理完所有的表为止
(4)WHERE:对虚拟表 VT3 应用 WHERE 过滤条件,只有符合 的记录才被插入虚拟表 VT4 中
(5)GROUP BY:根据 GROUP BY 子句中的列,对 VT4 中的记录进行分组操作,产生 VT5
(6)HAVING:对虚拟表 VT5 应用到 HAVING 过滤器,只有符合 的记录才被插入虚拟表 VT6 中
(7)SELECT:第二次执行 SELECT 操作,选择指定的列,插入到虚拟表 VT7
(8)DISTINCT:去除重复数据,产生虚拟表 VT8
(9)ORDER BY:将虚拟表 VT8 中的记录按照 进行排序操作,产生虚拟表 VT9
(10)LIMIT:取出指定行的记录,产生虚拟表 VT10,并返回给查询用户