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 中别名的步骤。







  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: "Microsoft SQL Server 2008技术内幕: T-SQL查询源码" 是一本关于SQL Server 2008中T-SQL查询技术书籍。该书深入探讨了SQL Server 2008的查询引擎和T-SQL语言的内部工作原理。 T-SQL是SQL Server的编程语言,用于编写查询和操作数据库的指令。书中通过分析T-SQL查询的源代码,揭示了SQL Server 2008的查询引擎是如何解析和执行查询的。读者可以深入了解查询处理器的内部机制,包括查询优化、查询重写、查询执行计划等方面。 通过阅读这本书,读者可以学习到优化T-SQL查询的技巧和策略。了解查询优化器的工作原理可以帮助开发人员编写高效的查询,提高系统的性能和响应速度。此外,书中还介绍了T-SQL查询的执行计划,帮助读者理解查询的执行方式和流程。 除了T-SQL查询的源码解析外,这本书还涵盖了SQL Server 2008的其他关键技术。读者将了解到索引、数据访问方法、事务处理和并发控制等方面的知识。这将帮助开发人员合理设计数据库架构,提高系统的稳定性和可扩展性。 总之,"Microsoft SQL Server 2008技术内幕: T-SQL查询源码"是一本有关SQL Server 2008查询引擎和T-SQL语言的深度技术书籍。它提供了对查询处理器的全面理解,并帮助读者优化T-SQL查询、提高系统性能。同时,它还涵盖了SQL Server 2008的其他关键技术,提供了全面的数据库开发和管理指导。 ### 回答2: Microsoft SQL Server 2008是一款常用的关系型数据库管理系统,具有强大的数据存储和查询能力。T-SQL是SQL Server的一种查询语言,通过编写T-SQL查询语句,可以对数据库中的数据进行查询、筛选和排序等操作。 T-SQL查询的源码指的是SQL Server内部实现这些查询的代码。通过查看T-SQL查询的源码,可以深入了解SQL Server的执行机制,帮助我们更好地优化查询性能和进行调试。 查询的源码包括了SQL Server的执行引擎、查询优化器和存储引擎等多个模块的代码。这些源码使用C++等编程语言编写,属于SQL Server的核心代码部分。通过分析源码,我们可以了解SQL Server是如何解析T-SQL查询语句、生成执行计划和执行查询的过程。同时,源码中还包含了一些关键算法和数据结构的实现细节,这对于我们理解SQL Server的内部机制非常有帮助。 然而,由于SQL Server的源码属于Microsoft的商业机密,一般用户无法直接获取到完整的源码。只有Microsoft的工程师和合作伙伴才能访问和修改源码。但是,Microsoft会通过提供一些加密的DLL文件和一些公开的接口,让用户能够使用和扩展SQL Server的功能。 总的来说,虽然我们无法直接查看SQL Server 2008的T-SQL查询源码,但是通过学习SQL Server的文档和使用工具,我们仍然能够深入了解SQL Server的内部机制,并优化我们的查询性能。 ### 回答3: Microsoft SQL Server 2008是一种关系型数据库管理系统,它为用户提供了一个强大的平台来存储、管理和检索数据。T-SQL(Transact-SQL)是SQL Server的查询语言,用于编写存储过程、触发器、视图和其他数据库对象的脚本。 要查询T-SQL源码,可以参考以下步骤: 1. 首先,确保已经安装了SQL Server Management Studio(SSMS),它是一个图形化界面的工具,用于与SQL Server进行交互。 2. 打开SSMS,并连接到SQL Server 2008数据库实例。 3. 在“对象资源管理器”中,展开“数据库”节点,找到包含要查询T-SQL脚本的数据库。 4. 右键单击该数据库,选择“新建查询”或使用快捷键“Ctrl+N”创建一个新查询窗口。 5. 将要查询T-SQL脚本复制并粘贴到查询窗口中。确保脚本是有效的,并且已经被正确地复制到查询窗口中。 6. 单击查询窗口工具栏上的“执行”按钮或使用快捷键“F5”来执行查询。 7. 执行查询后,将在结果窗口中显示查询的结果。结果包括与T-SQL脚本相关的数据,如行数、列名和结果集。 通过这些步骤,您可以轻松地查询T-SQL源码,并查看与之相关的数据。这是一种方便的方法,可以帮助开发人员和数据库管理员更好地理解和管理SQL Server 2008中的查询
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值