码迷,mamicode.com
首页 > 数据库 > 详细

T-SQL查询的逻辑处理过程

时间:2016-04-17 22:20:36      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:

对于一个查询SQL而言,通常将其逻辑处理过程分成7个大的阶段

分别是:

1.FROM

2.WHERE

3.GROUP BY

4.HAVING

5.SELECT

6.ORDER BY

7.TOP/OFFSET/FETCH

1、SQL语句执行阶段示例.

技术分享

2、流程图

技术分享

技术分享

流程:

1.FROM:该步骤用于验证查询的源表,并处理表操作符,生成虚拟表VT1

  1-1.如果存在左表和右表的交叉连接(求笛卡尔积),生成一个虚拟表VT1_1.

  1-2.对笛卡尔积(VT1)应用ON筛选器,生成虚拟表VT1_2.

  1-3.如果是外部连接,1-2中被过滤掉的数据将会被重新添加到虚拟表VT1_2中,生成虚拟表VT1_3.

2.WHERE:对虚拟表VT1应用WHERE筛选器,生成虚拟表VT2

3.GROUP BY:将VT2中的数据进行分组,生成VT3,如果语句包含WITH CUBE 或者WITH ROLLUP语句,则将分组统计结果再次加总后插入VT3,生成VT3_1.

4.HAVING:对VT3虚拟表应用HAVING筛选器,生成虚拟表VT4.

5.SELECT:处理SELECT中的子元素,生成虚拟表VT5.

  5-1.计算表达式:处理SELECT列表中的计算表达式,生成VT5_1.

  5-2.DISTINCT:处理VT5_1中的重复行,生成VT5_2.

6.ORDER BY:对VT5_2进行排序,生成一个游标VT6

  6-1.该步骤中已经可以使用SELECT列表中的列别名

  6-2.ORDER BY子句是应用到最终结果集上的,因此当SQL中出现UNION等关键字时,ORDER BY执行顺序在UNION操作之后.

7.TOP:根据ORDER BY子句中指定的排序规则,从VT6中筛选指定数量的行

 

参考资料:王晓文、张洪举<<锋利的SQL>>

T-SQL查询的逻辑处理过程

标签:

原文地址:http://www.cnblogs.com/Jabben/p/5402281.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!