【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】系统学习之三:逻辑查询处理阶段-六段式

时间: 2024-10-09 15:15:14

【SQL Server】系统学习之三:逻辑查询处理阶段-六段式的相关文章

Sql Server来龙去脉系列之三 查询过程跟踪

我们在读写数据库文件时,当文件被读.写或者出现错误时,这些过程活动都会触发一些运行时事件.从一个用户角度来看,有些时候会关注这些事件,特别是我们调试.审核.服务维护.例如,当数据库错误出现.列数据被更新.CPU占用过高等,跟踪这些状态是非常有用地. 本章节覆盖了事件系统的关键区域:触发器.事件通知器.改变跟踪.SQL跟踪.扩展事件等.这些事件都有一个相似目的:响应或者记录发生的事件.但每一中事件的工作方式又不一样. 基础:触发器和事件通知器 触发器非常多,Data Manipulation La

SQL SERVER逻辑查询处理阶段简介

逻辑查询处理阶段简介 FROM:对FROM子句中的前两个表执行笛卡尔积(Cartesian product)(交叉联接),生成虚拟表VT1 ON:对VT1应用ON筛选器.只有那些使为真的行才被插入VT2. OUTER(JOIN):如 果指定了OUTER JOIN(相对于CROSS JOIN 或(INNER JOIN),保留表(preserved table:左外部联接把左表标记为保留表,右外部联接把右表标记为保留表,完全外部联接把两个表都标记为保留表)中未找到匹配的行将作为外部行添加到VT2,生

SQL Server数据库学习总结

经过一段时间的学习,也对数据库有了一些认识,数据库基本是由表,关系,操作组成:对于初学者首先要学的 一图胜"十"言:SQL Server 数据库总结 一个大概的总结 经过一段时间的学习,也对数据库有了一些认识.  数据库基本是由表,关系,操作组成:对于初学者首先要学的:  1.数据库是如何存储数据的  表,约束,触发器  2.数据库是如何操作数据的  insert,update,delete T-sql 函数 存储过程 触发器  3.数据库是如何显示数据的  select SQLSer

关于SQL SERVER数据库学习总结

对于SQL SERFVER数据库也学了有一阵子了,自己也对自己所学做了一些总结. 我们首先学习数据库设计的一些知识点和用SQL语句建库. 设计数据库步骤:需求分析阶段,概要设计阶段,详细设计阶段, 建数据库的SQL语句如下(包含了如果有该数据库先删除在建立数据库) use masterGOif exists(select * from sysdatabases where name='Wages')DROP database WagesCREATE DATABASE Wages ON (  NA

SQL SERVER 系统存储过程

Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用.当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句.这样就可以提高存储过程的性能. Ø 存储过程的概念 存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行. 存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数.输出参数.返回单个或多个结果集以及返回值. 由于存储过程在创建时即在数据库服务器上进

sql server系统存储过程大全

关键词:sql server系统存储过程,mssql系统存储过程 xp_cmdshell --*执行DOS各种命令,结果以文本行返回. xp_fixeddrives --*查询各磁盘/分区可用空间 xp_loginconfig --*报告SQL Server 实例在Windows 上运行时的登录安全配置 xp_logininfo --*返回有关Windows 认证登录的信息. xp_msver --*返回有关Microsoft SQL Server 的版本信息 xp_enumgroups    

SQL Server解惑——为什么你的查询结果超出了查询时间范围

原文:SQL Server解惑--为什么你的查询结果超出了查询时间范围 废话少说,直接上SQL代码(有兴趣的测试验证一下),下面这个查询语句为什么将2008-11-27的记录查询出来了呢?这个是同事遇到的一个问题,个人设计了一个例子. USE AdventureWorks2014; GO SELECT *  FROM [Person].[Person] WHERE ModifiedDate >= '2008-11-26 00:00:00:000'   AND ModifiedDate <= '

(原)SQL Server 系统提供功能的三个疑惑

本文目录列表: 1.SQL Server系统提供的部分疑惑概述2.系统函数调用时DEFAULT代替可选参数使用不统一3.队列字段列message_enqueue_time记录的是UTC日期时间 4.@@Pack_Received系统函数提示信息有错误 5.总结语6.参考清单列表 正文: 1.SQL Server系统提供的部分疑惑概述   近来工作之余一直在系统地学习和研究SQL Server 数据库引擎这一整块,发现了一些原来没有太注意的东西,感觉SQL Server 光数据库引擎这块就有很多要

你真的会玩SQL吗?之逻辑查询处理阶段

前言 最近要对数据库进行优化,但由于工作项目中已经很少亲自写SQL而且用的都不是很复杂的语句,所以有些生疏了,于是翻翻N年前的笔记资料,想以此来记录回顾总结一些实用的SQL干货让大家来学习,若有不对之处可提出. 记得刚出来行走江湖的时候也是只会增.删.改.查四大法宝,一般公司没有多少复杂的业务,所以就够用了.但后来看着大神会写个几百行的SQL存储过程就感觉自己是不是弱爆了. 如今是大数据的时代,对数据的处理要求越来越重视,要出各种数据报表,因此百万数据处理速度,数据库明显比后台逻辑处理的优势不是