select语句的执行顺序大家比较少关注,下面将为您详细介绍sql语句中select语句的执行顺序,
select语句的执行的逻辑查询处理步骤:
(8)select (9)distinct
(11)
(1)from
(3) join
(2) on
(4)where
(5)group by
(6)with {cube | rollup}
(7)having
(10)order by
每个步骤产生一个虚拟表,该虚拟表被用作下一个步骤的输入。只有最后一步生成的表返回给调用者。
如果没有某一子句,则跳过相应的步骤。
1. from:对from子句中的前两个表执行笛卡尔积,生成虚拟表vt1。
2. on:对vt1应用on筛选器。只有那些使为真的行才被插入vt2。
3. outer(join):如果指定了outer join,保留表中未找到匹配的行将作为外部行添加到vt2,生成vt3。
如果from子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤1到步骤3,直到
处理完所有的表为止。
4. 对vt3应用where筛选器。只有使为true的行才被插入vt4。
5. group by:按group by 子句中的列列表对vt4中的行分组,生成vt5。
6. cube|rollup:把超组插入vt5,生成vt6。
7. having:对vt6应用having筛选器。只有使为true的组才会被插入vt7。
8. select:处理select列表,产生vt8。
9. distinct:将重复的行从vt8中移除,产生vt9。
10. order by:将vt9中的行按order by子句中的列列表排序,生成一个有表(vc10)。
11. top:从vc10的开始处选择指定数量或比例的行,生成表vt11,并返回给调用者。
原文链接:http://www.chinahoby.com/225.html