mssql select 执行顺序
查询语法:
选择(9)不同
(11)& lt;顶级规格。& lt选择列表>选项。
(1)自& ltleft_table>。
(3)lt;join_type>。加入<。right_table>。
(2)开启& ltjoin_condition>。
(4)何处& ltwhere_condition>。
(5)分组依据。group_by_list>。
(6)WITH { CUBE | ROLLOW }
(7)拥有。具有条件。
(10)订货人& ltorder_by_list>。
每一步都会生成一个虚拟表,用作下一步的输入。只有在最后一步中生成的表被返回给调用者。如果没有子句,跳过相应的步骤。
分辨率:
1.FROM:对FROM子句中的前两个表执行笛卡尔乘积,以生成虚拟表VT1。
2.开启:将开启过滤器应用于VT1。只有那些符合<加入条件>的人。只有为真的行被插入到VT2中。
3.连接:如果指定了外部连接,在保留表中找不到匹配项的行将作为外部行添加到VT2,以生成VT3。如果FROM子句包含两个以上的表,请对由上一个联接和下一个表生成的结果表重复步骤1到3,直到处理完所有的表。
4.WHERE将WHERE滤波器应用于VT3。仅使< where_condition >真行被插入到VT4中。
5.分组依据:根据分组依据子句中的列列表对VT4中的行进行分组,以生成VT5。
6.多维数据集|汇总:将超级组插入VT5以生成VT6。汇总、多维数据集或分组集运算符。这些是SELECT语句的GROUP BY子句的扩展。
7.HAVING:对VT6应用HAVING过滤器。仅使<具备条件>只有为真的组才会被插入到VT7中。
8.选择:处理选择列表以生成VT8。
9.不同:从VT8中删除重复行以生成VT9。
10.排序依据:根据ORDER BY子句中的列列表对VT9中的行进行排序,以生成一个表(VC10)。
11.顶部:从VC10的开头选择指定数量或比例的行来生成表VT11,并将其返回给调用者。