mssql select 执行顺序

时间: 2020-06-03 15:44 浏览次数:

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,并将其返回给调用者。