select语句执行的顺序: (1)from left_table (2)on join_condition (3)join_type join right_table (4)where where_condition (5)group by group_by_list (6)with {cube | rollup} /使用聚合函数进行的计算 (7)having having_condition (8)select (9)distinc
select语句执行的顺序:
(1)from
(2)on
(3) join
(4)where
(5)group by
(6)with {cube | rollup} /使用聚合函数进行的计算
(7)having
(8)select
(9)distinct
(10)order by
(11)
每个步骤产生一个虚拟表,该虚拟表被用作下一个步骤的输入。只有最后一步生成的表返回给调用者。
如果没有某一子句,则跳过相应的步骤。
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,并返回给调用者。