Inside Microsoft SQL Server 2005:T-SQL Querying (逻辑查询处理顺序|第一章)
2011-03-22 07:26
573 查看
如下所示SQL语句展示了逻辑查询的处理顺序
Table 2如下
需要使用的query语句如下:
第二步,判断ON的条件生产虚拟表V2,如下
第三步,添加OUTER JOIN的结果,如下
第四步,执行WHERE条件判断,如下
第五步,执行GROUP排序,如下
第六步,本列中略过第七步,执行H***ING条件,如下
第八步,执行SELECT,如下
第九步,执行DISTINCT第十步,执行ORDER BY,如下
第十一步,执行TOP
(8) SELECT (9) DISTINCT (11) (1) FROM (3) JOIN (2) ON (4) WHERE (5) GROUP BY (6) WITH {CUBE | ROLLUP} (7) H***ING (10) ORDER BY
步骤1 FROM:查询语句中from语句中的两个表进行交叉连接,生成虚拟表V1
步骤2 ON:筛选器ON应用到V1上,并把满足条件的行插入虚拟表V2
步骤3 OUTER(join):如果SQL语句中选择了OUTER JOIN则将其余的行也插入V2,生成虚拟表V3,。如果join语句中存在多个table,则重复以上步骤。
步骤4 WHERE:根据条件筛选相应的行插入至虚拟表V4
步骤5 GROUP BY:分类V4并插入虚拟表V5
步骤6 CUBE | ROLLUP:增加超级组的行至V5,生成V6
步骤7 H***ING:根据条件筛选相应的行插入至虚拟表V7
步骤8 SELECT:生成SELECT内容,生成V8
步骤9 DISTINCT:去掉重复的行,生成V9
步骤10 ORDER BY:排序生成V10
步骤11 TOP:保留前几条记录并返回结果
我们可以通过一个具体实例说明问题
Table 1如下
CustomerID | City |
FISSA | Madrid |
FRNDO | MAdrid |
KRLOS | Madrid |
MRPHS | Zion |
OrdID | CustomerID |
1 | FRNDO |
2 | FRNDO |
3 | KRLOS |
4 | KRLOS |
5 | KRLOS |
6 | MRPHS |
7 | NULL |
SELECT C.customerid, COUNT(O.orderid) AS numordersFROM dbo.Customers AS C LEFT OUTER JOIN dbo.Orders AS O ON C.customerid = O.customeridWHERE C.city = 'Madrid'GROUP BY C.customeridH***ING COUNT(O.orderid) < 3ORDER BY numorders;
第一步,两个table连接并生产一个28行的虚拟表V1(4*7),如下
C.customerid | C.city | O.orderid | O.customerid |
FISSA | Madrid | 1 | FRNDO |
FISSA | Madrid | 2 | FRNDO |
FISSA | Madrid | 3 | KRLOS |
FISSA | Madrid | 4 | KRLOS |
FISSA | Madrid | 5 | KRLOS |
FISSA | Madrid | 6 | MRPHS |
FISSA | Madrid | 7 | NULL |
FRNDO | Madrid | 1 | FRNDO |
FRNDO | Madrid | 2 | FRNDO |
FRNDO | Madrid | 3 | KRLOS |
FRNDO | Madrid | 4 | KRLOS |
FRNDO | Madrid | 5 | KRLOS |
FRNDO | Madrid | 6 | MRPHS |
FRNDO | Madrid | 7 | NULL |
KRLOS | Madrid | 1 | FRNDO |
KRLOS | Madrid | 2 | FRNDO |
KRLOS | Madrid | 3 | KRLOS |
KRLOS | Madrid | 4 | KRLOS |
KRLOS | Madrid | 5 | KRLOS |
KRLOS | Madrid | 6 | MRPHS |
KRLOS | Madrid | 7 | NULL |
MRPHS | Zion | 1 | FRNDO |
MRPHS | Zion | 2 | FRNDO |
MRPHS | Zion | 3 | KRLOS |
MRPHS | Zion | 4 | KRLOS |
MRPHS | Zion | 5 | KRLOS |
MRPHS | Zion | 6 | MRPHS |
MRPHS | Zion | 7 | NULL |
C.customerid | C.city | O.orderid | O.customerid |
FRNDO | Madrid | 1 | FRNDO |
FRNDO | Madrid | 2 | FRNDO |
KRLOS | Madrid | 3 | KRLOS |
KRLOS | Madrid | 4 | KRLOS |
KRLOS | Madrid | 5 | KRLOS |
MRPHS | Zion | 6 | MRPHS |
C.customerid | C.city | O.orderid | O.customerid |
FRNDO | Madrid | 1 | FRNDO |
FRNDO | Madrid | 2 | FRNDO |
KRLOS | Madrid | 3 | KRLOS |
KRLOS | Madrid | 4 | KRLOS |
KRLOS | Madrid | 5 | KRLOS |
MRPHS | Zion | 6 | MRPHS |
FISSA | Madrid | NULL | NULL |
C.customerid | C.city | O.orderid | O.customerid |
FRNDO | Madrid | 1 | FRNDO |
FRNDO | Madrid | 2 | FRNDO |
KRLOS | Madrid | 3 | KRLOS |
KRLOS | Madrid | 4 | KRLOS |
KRLOS | Madrid | 5 | KRLOS |
FISSA | Madrid | NULL | NULL |
C.customerid | C.customerid | C.city | O.orderid | O.customerid |
FRNDO | FRNDO | Madrid | 1 | FRNDO |
FRNDO | Madrid | 2 | FRNDO | |
KRLOS | KRLOS | Madrid | 3 | KRLOS |
KRLOS | Madrid | 4 | KRLOS | |
KRLOS | Madrid | 5 | KRLOS | |
FISSA | FISSA | Madrid | NULL | NULL |
C.customerid | C.customerid | C.city | O.orderid | O.customerid |
FRNDO | FRNDO | Madrid | 1 | FRNDO |
FRNDO | Madrid | 2 | FRNDO | |
FISSA | FISSA | Madrid | NULL | NULL |
C.customerid | numorders |
FRNDO | 2 |
FISSA | 0 |
C.customerid | numorders |
FISSA | 0 |
FRNDO | 2 |
相关文章推荐
- Inside Microsoft SQL Server 2005:T-SQL Querying (查询处理的数据流程|第二章)
- 书评 -- Inside Microsoft SQL Server 2005 : T-SQL Querying,T-SQL Programming
- 书评 -- Inside Microsoft SQL Server 2005 : T-SQL Querying,T-SQL Programming
- 书评 -- Inside Microsoft SQL Server 2005 : T-SQL Querying,T-SQL Programming
- 书评 -- Inside Microsoft SQL Server 2005 : T-SQL Querying,T-SQL Programming
- 书评 -- Inside Microsoft SQL Server 2005 : T-SQL Querying,T-SQL Programming
- MSSQL逻辑查询的步骤 摘自:Microsoft SQL Server 2005技术内幕:T-SQL查询
- Microsoft SQL Server 2008 技术内幕:T-SQL查询 逻辑查询处理阶段(一)
- 书评 -- Inside Microsoft SQL Server 2005 : T-SQL Querying,T-SQL Programming
- Inside Microsoft SQL Server 2008: T-SQL Querying 读书笔记之查询优化
- 书评 -- Inside Microsoft SQL Server 2005 : T-SQL Querying,T-SQL Programming
- 书评 -- Inside Microsoft SQL Server 2005 : T-SQL Querying,T-SQL Programming
- Inside Microsoft SQL Server 2005: T-SQL Programming (数据类型|第一章) 字符串
- Inside Microsoft SQL Server 2005: T-SQL Programming (数据类型|第一章) 基于CLR的自定义数据类型
- 书评 -- Inside Microsoft SQL Server 2005 : T-SQL Querying,T-SQL Programming
- 书评 -- Inside Microsoft SQL Server 2005 : T-SQL Querying,T-SQL Programming
- 书评 -- Inside Microsoft SQL Server 2005 : T-SQL Querying,T-SQL Programming
- MS SQL Server 2005 逻辑查询处理中的各个阶段(一)
- 书评 -- Inside Microsoft SQL Server 2005 : T-SQL Querying,T-SQL Programming
- 书评 -- Inside Microsoft SQL Server 2005 : T-SQL Querying,T-SQL Programming