【SQL Server】系统学习之三:逻辑查询处理阶段-六段式
2014-08-17 11:22
344 查看
一、From阶段
针对连接说明:
1、笛卡尔积
2、on筛选器
插播:unknown=not unknuwn 缺失的值;
筛选器(on where having)把unknown当做FALSE处理,排除在筛选结果之外。如果比较两个null,结果是不相等的,false
check约束中当做true,例如要求某列大于0,当插入null时是成功的,认为null>0是ture。如果比较两个null,结果是相等的,这种比较在unique约束、集合运算(例如union 、except)、排序、分组,都认为是相等的。
3、添加外部行(外连接)
二、where
由于还未分组,不能使用聚合函数;还未select,不能使用select中指定的列别名。
三、group by
四、having
五、select阶段
1、聚合运算
2、discount排重
3、top
如果未指定order by,则返回的集是不确定的
当指定了with ties时,会检查最后一行,并返回和最后一行值相同的所有行。
六、order by
这一步返回的不再是有效的表,而是游标,这也是为什么改语句不能用在表表达式中的原因。(还记得表表达式吗?视图、内联表值函数、派生表、cte
例外情况,是和top搭配使用时,作为获取前n条的逻辑有限顺序,此时返回的行,并未排序,不保证顺序,这点需要注意。
如果不必要,不要轻易指定order by,会执行索引扫描或者执行sort运算符。
order by认为null是相等的。同时,null比已知值要小,会排在最前面。
延伸:
一、表运算符
针对连接说明:
1、笛卡尔积
2、on筛选器
插播:unknown=not unknuwn 缺失的值;
筛选器(on where having)把unknown当做FALSE处理,排除在筛选结果之外。如果比较两个null,结果是不相等的,false
check约束中当做true,例如要求某列大于0,当插入null时是成功的,认为null>0是ture。如果比较两个null,结果是相等的,这种比较在unique约束、集合运算(例如union 、except)、排序、分组,都认为是相等的。
3、添加外部行(外连接)
二、where
由于还未分组,不能使用聚合函数;还未select,不能使用select中指定的列别名。
三、group by
四、having
五、select阶段
1、聚合运算
2、discount排重
3、top
如果未指定order by,则返回的集是不确定的
当指定了with ties时,会检查最后一行,并返回和最后一行值相同的所有行。
六、order by
这一步返回的不再是有效的表,而是游标,这也是为什么改语句不能用在表表达式中的原因。(还记得表表达式吗?视图、内联表值函数、派生表、cte
例外情况,是和top搭配使用时,作为获取前n条的逻辑有限顺序,此时返回的行,并未排序,不保证顺序,这点需要注意。
如果不必要,不要轻易指定order by,会执行索引扫描或者执行sort运算符。
order by认为null是相等的。同时,null比已知值要小,会排在最前面。
延伸:
一、表运算符
相关文章推荐
- 个人学习4之--SQL中逻辑查询处理的各个阶段
- SQL Server 2005 技术内幕 TSQL查询学习笔记chapter1and 2逻辑查询处理和物理查询处理
- 【个人学习4之--SQL中逻辑查询处理的各个阶段】
- mysql 学习---->字符串、数值处理、日期、查询的逻辑处理、系统相关内容查询、IP地址相关、密码
- SQL SERVER逻辑查询处理阶段简介
- SQL SERVER逻辑查询处理阶段简介
- 个人学习4之--SQL中逻辑查询处理的各个阶段
- mysql 学习记录(五)--字符串、数值处理、日期、查询的逻辑处理、系统相关内容查询、IP地址相关、密码
- SQL Server 查询处理中的各个阶段
- SQL Server 2008的逻辑查询处理步骤
- SQL Server 查询处理中的各个阶段(SQL执行顺序)
- SQL Server 查询处理中的各个阶段(SQL执行顺序)
- SQL Server 查询处理中的各个阶段(SQL执行顺序)
- SQL Server 查询处理中的各个阶段(SQL执行顺序)
- SQL Server 2008的逻辑查询处理步骤
- SQL Server 2008的逻辑查询处理步骤
- sql server逻辑查询处理
- 逻辑查询处理阶段
- SQL Server 查询处理中的各个阶段(SQL执行顺序)
- 批处理,变量,逻辑控制,函数,高级查询(含存储过程)的SQL SERVER 高级操作