Inside Microsoft SQL Server 2005:T-SQL Querying (逻辑查询处理顺序|第一章)
来源:互联网 发布:k11防水和js防水的区别 编辑:程序博客网 时间:2024/05/01 23:08
如下所示SQL语句展示了逻辑查询的处理顺序
(8) SELECT (9) DISTINCT (11) (1) FROM (3) JOIN (2) ON (4) WHERE (5) GROUP BY (6) WITH {CUBE | ROLLUP}(7) HAVING (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 HAVING:根据条件筛选相应的行插入至虚拟表V7
步骤8 SELECT:生成SELECT内容,生成V8
步骤9 DISTINCT:去掉重复的行,生成V9
步骤10 ORDER BY:排序生成V10
步骤11 TOP:保留前几条记录并返回结果
我们可以通过一个具体实例说明问题
Table 1如下
CustomerIDCityFISSAMadridFRNDOMAdridKRLOSMadridMRPHSZion
Table 2如下
OrdIDCustomerID1FRNDO2FRNDO3KRLOS4KRLOS5KRLOS6MRPHS7NULL
需要使用的query语句如下:
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.customeridHAVING COUNT(O.orderid) < 3ORDER BY numorders;
第一步,两个table连接并生产一个28行的虚拟表V1(4*7),如下
第二步,判断ON的条件生产虚拟表V2,如下
第三步,添加OUTER JOIN的结果,如下
第四步,执行WHERE条件判断,如下
第五步,执行GROUP排序,如下
第六步,本列中略过
第七步,执行HAVING条件,如下
第八步,执行SELECT,如下
第九步,执行DISTINCT
第十步,执行ORDER BY,如下
第十一步,执行TOP
- Inside Microsoft SQL Server 2005:T-SQL Querying (逻辑查询处理顺序|第一章)
- Inside Microsoft SQL Server 2005:T-SQL Querying (查询处理的数据流程|第二章)
- 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
- 书评 -- 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
- 书评 -- 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
- Windows 2008系统上安装Nero 10的方法
- Mysql数据库的分离和附加
- Android EditText介绍
- UNIX后台执行命令
- SetTimer函数的使用(转)
- Inside Microsoft SQL Server 2005:T-SQL Querying (逻辑查询处理顺序|第一章)
- NET程序集强签名
- PHP的优点
- Android ----制作自己的Vendor
- 别了,Easy微博!
- Gridview,DataList,Repeater 鼠标经过时行颜色变换
- d3d中的Surface(2d)绘制
- C语言的一种老式写法
- vs2008添加头文件路径(vs2008 add directories)