T-SQL 查询语句的执行顺序解析
发布时间:2020-12-12 09:28:35 所属栏目:MsSql教程 来源:网络整理
导读:(5)SELECT (5-2) DISTINCT(5-3)TOP( )(5-1) (1)FROM (1-J) JOIN on (2)WHERE (3)GROUP BY (4)HAVING (6)ORDER BY ; 每一步都会生成一个虚拟表,该虚拟表会作为下一步的输入。这些虚拟表对于调用者是不可用的,只有最后一步生成的虚拟
(5)SELECT (5-2) DISTINCT(5-3)TOP( (1)FROM (1-J) (2)WHERE (3)GROUP BY (4)HAVING (6)ORDER BY 每一步都会生成一个虚拟表,该虚拟表会作为下一步的输入。这些虚拟表对于调用者是不可用的,只有最后一步生成的虚拟表才会返回给调用者。如果在查询中没有指定某一个子句,则会跳过相应的步骤。接下来就简单地描述一下这些不同的逻辑步骤。 (1) FROMFROM阶段标识出查询的来源表,处理表运算符,每个表运算符也会应用一系列子阶段。例如,在联接运算中涉及的阶段是(1-J1)笛卡尔积、(1-J2)ON筛选器和(1-J3)添加外部行。FROM阶段生成虚拟表VT1。(1-J1) 笛卡尔积这个阶段对表运算符涉及的两个表执行笛卡尔积(交叉联接),生成虚拟表VT1-J1。(1-J2) ON筛选器这个阶段对VT1-J1中的行根据ON子句中出现的谓语进行筛选。只有让该谓语取值为TRUE的行,才能插入VT1-J2中。(1-J3) 添加外部行如果指定了OUTER JOIN(相对于CROSS JOIN 或 INNER JOIN),则将保留表(preserved table)中没有找到匹配的行,作为外部行添加到VT1-J2中,生成VT1-J3。(2) WHERE这个阶段根据在WHERE子句中出现的谓语((3) GROUP BY按照GROUP BY子句中指定的列名列表,将VT2中的行进行分组,生成VT3。(4) HAVING根据HAVING子句中出现的谓语((5) SELECT处理SELECT子句中的元素,生成VT5。(5-1) 计算表达式计算SELECT列表中的表达式,生成VT5-1。(5-2) DISTINCT删除VT5-1中的重复行,生成VT5-2。(5-3) TOP根据ORDER BYi子句定义的逻辑排序,从VT5-2中选择前面指定数量或百分比的行,生成表VT5-3。(6)ORDER BY 根据ORDER BY子句中指定的列名列表,对VT5-3中的行进行排序,生成游标VC6。 以上就是一个完整的T-SQL语句的执行过程,希望能给大家帮助。 以上内容摘自《Microsoft SQL Server 2008技术内幕 T-SQL查询》一书。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |