(8) select (9) distinct (11)
2 (1) from
3 (3) join
4 (2) on
5 (4) where
6 (5) group by
7 (6) with {cube | rollup}
8 (7) having
9 (10) order by
如果没有在查询中指定某一个子句,将跳过相应的步骤。
逻辑查询处理阶段简介:
1、 from:对from子句中的前两个表执行笛卡尔积(交叉联接),生成虚拟表vt1。
2、 on:对vt1应用on筛选器,只有那些使为真才被插入到tv2。
3、 outer (join):如果指定了outer join(相对于cross join或inner join),保留表中未找到匹配的行将作为外部行添加到vt2,生成tv3。如果from子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤1到步骤3,直到处理完所有的表位置。
4、 where:对tv3应用where筛选器,只有使为true的行才插入tv4。
5、 group by:按group by子句中的列列表对tv4中的行进行分组,生成tv5。
6、 cute|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的开始处选择指定数量或比例的行,生成表tv11,并返回给调用者。
编辑特别推荐:
sqlserver中删除重复数据