原文:SQLServer 2008 技术内幕——T-SQL 查询 笔记

1、SQL编程有许多独特之处,如:面向集合的思维方式、查询元素的逻辑处理顺序、三值逻辑。如果不掌握这些知识就开始用SQL编程,得到的将是冗余的、性能低下的代码,而且难以维护。

2、在SQLServer中负责生成实际工作计划(执行计划)的组件是:查询优化器(query optimizer)。只有在确保结果集正确的前提下,优化器才会走捷径。明确区分查询的逻辑处理和物理处理是非常重要的。

3、逻辑查询的各个阶段:

(5) SELECT (5-2) DISTINCT (5-3) TOP (<top_specification>) (5-1) <select_list>
(1) FROM (1-J) <left_table> <join_type> JOIN <right_table> ON <on_predicate>
|(1-A) <left_table> <apply_type> APPLY <right_table_expression> AS <alias>
|(1-P) <left_table> PIVOT (<pivot_specification>) AS <alias>
|(1-U) <left_table> UNPIVOT (<unpivot_specification>) AS <alias>
(2) WHERE <where_predicate>
(3) GROUP BY <group_by_specification>
(4) HAVING <having_predicate>
(6) ORDER BY <order_by_list>;

第一步:FROM :表示出查询的来源表,在联结运算中涉及的阶段是(1-J1)笛卡儿积、(1-J2)ON筛选器和(1-J3)添加外部行。并生成虚拟表VT1。

1.1、笛卡儿积:两表执行笛卡儿积,生成虚拟表VT1-J1。

1.2、ON筛选器:针对VT1-J1中满足ON为true的行,插入VT1-J2。

1.3、添加外部行:如果指定了OUTER JOIN (相对于CROSS JOIN或INNER JOIN ),则将保留表中没有匹配的行,作为外部行添加,生成VT1-J3。

第二步:WHERE:根据WHERE 子句中的谓词对VT1中的数据进行行筛选,只对结果为TRUE的行,插入VT2。

第三步:GROUP BY :根据group by中的列表,将VT2进行分组,每一组只有一个结果行,生成VT3。

第四步:HAVING:根据HAVING出现的谓词对VT3金信筛选,只让结果为TRUE的组才插入VT4。

第五步:SELECT:处理SELECT 子句中的元素,产生VT5。

5.1、计算表达式:根据SELECT 列表中的表达式,生成VT5-1。

5.2、DISTINCT:删除VT5-1中重复的行,生成VT5-2。

5.3、TOP:根据ORDER BY 子句定义逻辑排序,从VT5-2中选择前面指定数量或百分比的行,生产VT5-3。

第六步:ORDER BY :根据ORDER BY 子句中指定的列名,对VT5-3进行排序。生成游标VC6。

对于三值逻辑:

a、所有的查询筛选器(ON、WHERE 和HAVING )都把null当作FALSE来处理。

b、check约束中的null值被当作TRUE来对待。

c、UNIQUE约束、集合运算(UNION 和EXCEPT)、及排序和分组操作,认为两个null是相等的。

注意:

1、如果FROM 子句中有多个表运算符,则按从左到右的顺序进行处理。每个表运算符的结果作为下一个表运算符的左输入,最后生成虚拟表作为下一阶段的输入。

2、因为在WHERE之前还没对数据分组,所以WHERE 子句不能使用聚合。在筛选器中,ON对保留表中部分行的删除并不是最终的,而WHERE是最终的。只有使用外联结的时候,ON和WHERE才有逻辑区别。

3、如果在查询中指定了GROUP BY ,后续所有步骤都只能在指定的分组上操作。

4、HAVING是唯一可用于分组数据的筛选器。

5、由于SQL具有多个运算同时计算(all-at-once operation),所以SELECT 语句中的逻辑顺序是无关的。

6、ORDER BY 是唯一可以使用SELECT 中别名的步骤。

SQLServer 2008 技术内幕——T-SQL 查询 笔记的更多相关文章

  1. SQLSERVER 2008 技术内幕 T-SQL查询 笔记1: SQL 执行顺序

    与大多数语言一样,SQL语言也有一个执行顺序,只是在大多数编程语言中,代码是按照编写顺序来处理的,而在SQL中则不是,下图为SQL 执行顺序. () ) [ ALL | DISTINCT ] () [ ...

  2. Microsoft SQL Server 2005技术内幕:T-SQL查询笔记

    logical operation:基于微软查询处理概念模型的逻辑操作.例如,联接运算符的physical operation属性表示联接算法(nested loops,merge ,hash)物理运 ...

  3. 2008技术内幕:T-SQL语言基础 联接查询摘记

    续 2008技术内幕:T-SQL语言基础 单表查询摘记 第三章 联接查询 Microsoft SQL Server 2008 支持四种表运算符 join(ANSI标准).apply(T-SQL扩展). ...

  4. 2008技术内幕:T-SQL语言基础 单表查询摘记

    这里的摘抄来自<Microsoft SQL Server 2008技术内幕:T-SQL语言基础>,书中用到的案例数据库是这个 TSQLFundamentals2008 ,官网给出的连接是这 ...

  5. 《[MySQL技术内幕:SQL编程》读书笔记

    <[MySQL技术内幕:SQL编程>读书笔记 2019年3月31日23:12:11 严禁转载!!! <MySQL技术内幕:SQL编程>这本书是我比较喜欢的一位国内作者姜承尧, ...

  6. 2008技术内幕:T-SQL语言基础

    2008技术内幕:T-SQL语言基础 单表查询摘记 这里的摘抄来自<Microsoft SQL Server 2008技术内幕:T-SQL语言基础>,书中用到的案例数据库是这个 TSQLF ...

  7. 《microsoft sql server 2008技术内幕 t-sql语言基础》

    第一章 TSQL编程基础 源代码下载:TSQLFundamentals2008 创建表 USE testdb; CREATE TABLE dbo.Employess ( empid INT NOT N ...

  8. MySQL技术内幕:SQL编程 第2章 数据类型 读书笔记

    2.1 类型属性 2.1.1 UNSIGNED 数字无符号化, INT的值 -2147483648 ~ 2147483647  INT UNSIGNED的值 0 ~ 4294967295 int a ...

  9. 学习Microsoft SQL Server 2008技术内幕:T-SQL语法基础--第4章

    第4章 子查询 4.2.1 Exist 谓语: use TSQLFundamentals2008 select * from Sales.Customers as C where c.country= ...

随机推荐

  1. 《JavaScript设计模式与开发实践》读书笔记之中介者模式

    1. 中介者模式 中介者模式的作用就是用来解除对象与对象之间的紧耦合关系,增加中介者后,所有相关对象都通过中介者来通信,而不再相互引用 1.1中介者模式的例子 以泡泡堂游戏为例,先定义一个玩家构造函数 ...

  2. SQL Server 2005使用OSQL连接出错

    错误信息: [SQL Native Client] 命名管道提供程序:无法打开与 Sql Server 的连接[2]. 如下图: 解决方案: 设置Tcp/IP属性,将IP1,IP2,IPALL的TCP ...

  3. cisco(思科)交换机配置篇【两】

    上一页大家津津乐道cisco基本操作命令开关,而端午假期,该cisco简单的开关配置,并希望请您分享"端午节快乐"!Ok,配置交换机,首先,你必须进入全局配置模式Switch,在成 ...

  4. iOS随机颜色

    #import <UIKit/UIKit.h> @interface UIColor (RandomColor) +(UIColor *) randomColor; @end #impor ...

  5. windows phone (26) ApplicationBar应用程序栏

    原文:windows phone (26) ApplicationBar应用程序栏 在应用程序中,如果需要几个按钮或者菜单来执行一些普通的命令,就应该考虑使用ApplicationBar,因为silv ...

  6. erlang集群IP及port管理

    erlang集群是依靠epmd维护的,epmd是erlang集群节点间port映射的守护进程.负责维护集群内的节点连接.提供节点名称到IP地址及port的解析服务. epmd 自己定义port号 ep ...

  7. Linux内核源代码的学习过程转换完成细节

    linux中的进程是个最主要的概念,进程从执行队列到開始执行有两个開始的地方, 一个就是switch_to宏中的标号1:"1:/t",//仅仅要不是新创建的进程,差点儿都是从上面的 ...

  8. HTTP2.0协议

    HTTP2.0协议 http2协议的草案已经出来了,阅读了一下网上的中文版,http2尽可能的兼容http1.1.改进了http1.1协议的不足. http1.0和http1.1的缺点: 1.http ...

  9. 浏览器被劫持到http://hao.169x.cn/?v=108的解决办法

    不管什么浏览器打开都是 http://hao.169x.cn/?v=108 ​1.下载wmi tool,(微软官网下载,我的下载地址是: http://120.52.73.52/download.mi ...

  10. Java 中泛型的全面解析(转)

    Java泛型(generics) 是JDK 5中引入的一个新特性,允许在定义类和接口的时候使用类型参数(type parameter).声明的类型参数在使用时用具体的类型来替换.泛型最主要的应用是在J ...