这篇文章主要介绍关于 SQL 的执行顺序是怎样的,SQL 在执行顺序中最先执行的是 FROM 操作,最后执行 LIMIT;在执行每一个操作的时候都会产生一张虚拟的表,但执行过程中产生的表不会对用户展示,只有最后一张表作为输出结果呈现给用户。
1. SQL执行过程
select 语句的完整语法如下:
(9) SELECT
(10) DISTINCT column,
(6) AGG FUNC(column or expression), ...
(1) FROM left tab1
(3) JOIN right tab2
(2) ON tab1.column = tab2.column
(4) WHERE constraint_expression
(5) GROUP BY column
(7) WITH CUBE ROLLUP
(8) HAVING constraint_expression
(11) ORDER BY column ASC|DESC
(12) LIMIT count OFFSET count;
1.1 FROM 执行笛卡尔积
FROM 才是 SQL 语句执行的第一步,并非 SELECT 。对 FROM 子句中的前两个表执行笛卡尔积(交叉联接),生成虚拟表 VT1,获取不同数据源的数据集。
FROM 子句执行顺序为从后往前、从右到左,FROM 子句中写在最后的表(基础表 driving table)将被最先处理,即最后的表为驱动表,当 FROM 子句中包含多个表的情况下,我们需要选择数据最少的表作为基础表。
1.2 ON 应用ON过滤器
对虚拟表 VT1 应用 ON 筛选器,ON 中的逻辑表达式将应用到虚拟表 VT1 中的各个行,筛选出满足 ON 逻辑表达式的行,生成虚拟表 VT2 。