【SQL Server】系统学习之三:逻辑查询处理阶段-六段式
一、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比已知值要小,会排在最前面。
延伸:
一、表运算符
【SQL Server】系统学习之三:逻辑查询处理阶段-六段式的更多相关文章
- Sql Server来龙去脉系列之三 查询过程跟踪
我们在读写数据库文件时,当文件被读.写或者出现错误时,这些过程活动都会触发一些运行时事件.从一个用户角度来看,有些时候会关注这些事件,特别是我们调试.审核.服务维护.例如,当数据库错误出现.列数据被更 ...
- 关于SQL SERVER数据库学习总结
对于SQL SERFVER数据库也学了有一阵子了,自己也对自己所学做了一些总结. 我们首先学习数据库设计的一些知识点和用SQL语句建库. 设计数据库步骤:需求分析阶段,概要设计阶段,详细设计阶段, 建 ...
- Sql server 系统表
sql server系统表详细说明 SQL Server 用户库中系统表说明 名称 说明 备注 syscolumns 每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行. sys ...
- sql server系统存储过程大全
关键词:sql server系统存储过程,mssql系统存储过程 xp_cmdshell --*执行DOS各种命令,结果以文本行返回. xp_fixeddrives --*查询各磁盘/分区可用空间 x ...
- SQL Server系统表介绍与使用
关于SQL Server数据库的一切信息都保存在它的系统表格里.我怀疑你是否花过比较多的时间来检查系统表格,因为你总是忙于用户表格.但是,你可能需要偶尔做一点不同寻常的事,例如数据库所有的触发器.你可 ...
- SQL Server解惑——为什么你的查询结果超出了查询时间范围
原文:SQL Server解惑--为什么你的查询结果超出了查询时间范围 废话少说,直接上SQL代码(有兴趣的测试验证一下),下面这个查询语句为什么将2008-11-27的记录查询出来了呢?这个是同事遇 ...
- 关于SQL Server系统数据库详解
介绍这里我们介绍SQL Sever内部的系统数据库的作用和用户数据库之间联系,关于SQL Sever如何管理用户数据库的原理,对于每个数据库开发人员和DBA都是必须掌握的. SQL Sever系统数据 ...
- 你真的会玩SQL吗?之逻辑查询处理阶段
你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...
- SQL Server 系统数据库
Sql Server的系统数据库分为:master.model.msdb,resouce和tempdb,这五个数据库在SQL Server中各司其职,作为研发人员,很有必要了解这几个数据库的职责,下面 ...
随机推荐
- codevs 1299 线段树 区间更新查询
1299 切水果 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题解 查看运行结果 题目描述 Description 简单的说,一共N个水果排成 ...
- This application failed to start because it could not find or load the Qt platform plugin “windows”错误解决方法
这是一个困扰我很久的问题,关于Qt下生成的exe文件在没有安装Qt的机器上无法运行的问题.Qt是编写C++图形界面的一个很好工具,比MFC来的直观.可是,Qt的安装却是一个让人头疼的事情.早在上个学期 ...
- Lock锁
Lock lock = new ReentrantLock(); lock.lock(); try { } finally { } 注意:不要将获取锁的过程写在try块中,因为如果在获取锁(自定义锁的 ...
- .equal与==的区别
==比较的是对象的地址,也就是是否是同一个对象: equal比较的是对象的值. Integer r1 = new Integer(900);//定义r1整型对象Integer r2 = new Int ...
- android开源项目---developer篇
本文转载于:http://blog.csdn.net/likebamboo/article/details/19081209 主要介绍和Android开发工具和测试工具相关的开源项目. Buck fa ...
- javascript多重继承
function employee(name, job, born) { this.name = name; this.job = job; this.born = born;} function h ...
- eclipse启动不了,让查看.metadata/.log
方法一: 下面是workspace E:\kuaipan\work\J2EE_workspace\.metadata\.plugins\org.eclipse.core.resources\.proj ...
- Unity3D的杂记
刷新帧的不同控制函数 FixedUpdate 可以多次调用: 不饿能用于帧频很高的情况: Update 仅一次调用(每帧): LateUpdate 每帧调用一次: Corountine 用startC ...
- SQL 将一列多行数据合并为一行 FOR XML PATH
FOR XML PATH 方法是用于将查询结果集以XML形式展示,这样展示方式的好处不言而喻.现在我要介绍的FOR XML PATH的"另类"用法. 首先,我们先来看看它的正常用法 ...
- T 恤
https://detail.tmall.com/item.htm?spm=a220o.1000855.1998025129.1.A6Zaol&id=528088614049&pvid ...