博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
你不可不知的T-SQL执行顺序
阅读量:6128 次
发布时间:2019-06-21

本文共 848 字,大约阅读时间需要 2 分钟。

-- SQL查询处理的步骤(生成了很多中间表)

SELECT TOP 3 a.CustomerId,COUNT(1) AS order_count

FROM dbo.T_Customer AS a

INNER JOIN dbo.T_Order AS b

ON a.CustomerId = b.CustomerId

WHERE a.CustomerId < 200

GROUP BY a.CustomerId WITH ROLLUP

HAVING COUNT(1)>10

ORDER BY order_count;

 

 

/* 执行顺序

1、FROM:对FROM子句中的前两个表执行笛卡尔积(交叉联接),生成虚拟表T1。交叉连接:cross join 并且不需要ON连接

2、ON:对T1应用ON筛选器,两边都匹配的数据放入到T2。(INNER JOIN)

3、如果是左外连接或右外连接则保留表中未找到匹配的行将作为外部行添加到T2,生成T3。

如果FROM子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤到步骤,直到处理完所有的表位置。

4、WHERE:对T3应用WHERE筛选器,只有使为true的行才插入T4。

5、GROUP BY:按GROUP BY子句中的列列表对T4中的行进行分组,生成T5 。

6、CUBE|ROLLUP:把超组插入T5,生成T6。

7、HAVING:对T6(没有T6时针对T5)应用HAVING筛选器,只有使为true的组插入到T7。

8、SELECT:处理SELECT列表,产生T8。

9、DISTINCT:将重复的行从T8中删除,产品T9。

10、ORDER BY:将T9中的行按ORDER BY子句中的列列表顺序,生成一个游标(VC10)。

11、TOP:从VC10的开始处选择指定数量或比例的行,生成表T11,并返回给调用者。

*/

转载于:https://www.cnblogs.com/fanchaoyun/p/3331686.html

你可能感兴趣的文章
centos 下安装g++
查看>>
嵌入式,代码调试----GDB扫盲
查看>>
类斐波那契数列的奇妙性质
查看>>
配置设置[Django]引入模版之后报错Requested setting TEMPLATE_DEBUG, but settings are not configured....
查看>>
下一步工作分配
查看>>
Response. AppendHeader使用大全及文件下载.net函数使用注意点(转载)
查看>>
Wait Functions
查看>>
代码描述10313 - Pay the Price
查看>>
jQuery最佳实践
查看>>
centos64i386下apache 403没有权限访问。
查看>>
vb sendmessage 详解1
查看>>
jquery用法大全
查看>>
Groonga 3.0.8 发布,全文搜索引擎
查看>>
PC-BSD 9.2 发布,基于 FreeBSD 9.2
查看>>
网卡驱动程序之框架(一)
查看>>
css斜线
查看>>
Windows phone 8 学习笔记(3) 通信
查看>>
重新想象 Windows 8 Store Apps (18) - 绘图: Shape, Path, Stroke, Brush
查看>>
Revit API找到风管穿过的墙(当前文档和链接文档)
查看>>
Scroll Depth – 衡量页面滚动的 Google 分析插件
查看>>