经过近三个月的不懈努力,终于翻译完毕了。图书虽然是基础知识,但是,即使你已经使用T-SQL几年,很多地方还是能够弥补你的知识空白。大师级的人物写基础知识,或许你想知道这基础中还有哪些深奥,敬请期待吧。
这次是邮电出版社负责组织翻译的,非常感谢杜洁女士的努力,才使得这样精彩的东西能够与国人有缘。
京东:http://item.jd.com/11362891.html
前言
很高兴Itzik能够有时间和精力来编写一本有关T-SQL基础知识的图书。多年来,Itzik一直以他丰富的Microsoft SQL Server教学、辅导和咨询经验在编写高级编程方面的图书,这导致了与新手和缺乏经验的用户以及许多不以T-SQL编程为主要工作事项的专家之间产生了较大的距离。
提到T-SQL,Itzik是世界上最具有见解的人之一。事实上,许多我们(SQL Server开发团队成员)计划实施的新语言扩展都要征求Itzik的专业意见,他的反馈和磋商已经成为我们SQL Server开发过程的一个重要组成部分。
作为一个专业领域的专家,书写一本入门级的图书从来都不是一件容易的任务。不过,Itzik具有多年教授初级和高级编程课程的优势,这些经验让他在从众多高级课程里面筛选基础T-SQL信息时是一笔重要的财富。但在这本书中,Itzik没有简单地回避那些被认为是高级的东西,他不畏惧挑战像集合理论、谓词逻辑和关系模型等这些先前被一直认为是复杂的项目,而是用简洁的术语来介绍它们,并为读者提供了足够的信息来了解他们对于SQL语言的重要性。这样做的效果是,使读者不仅能够了解T-SQL的工作原理,而且知道为什么这样做。
对于编程手册和图书,没有一种方法比使用一个好的示例来传递要讨论议题的效果更好。这本书包含很多示例,可以从Itzik的网站(http://tsql.solidq.com)下载。T-SQL是一种基于正式SQL语言ISO和ANSI标准的方言,但它拥有众多的扩展,可以提高T-SQL代码的表现能力和简洁程度。Itzik的许多示例对于一个演练同时展示了T-SQL方言解决方案和等效的ANSI SQL解决方案,这样做的好处是能够让熟悉T-SQL的读者了解ANSI版本的SQL,以及能够让程序员书写可以轻松地部署在多个不同数据库平台上的SQL代码。
Itzik与SQL Server团队深入交流了在第1章(T-SQL查询和编程的背景)中他对SQL Server特色的解释:应用、盒子和云(Appliance、Box和Cloud,ABC),迄今为止,我看到术语ABC只是在MicrosoftSQL Server团队内部使用,但我确信该术语的传播只是时间问题。Itzik在书中开发和测试了针对SQLServer特色Box和Cloud的示例,并且附录中列出了从什么地方可以使用到SQL Server的云版本,即Windows Azure SQL Database。因此,你可以将这本书作为自己云体验的起点,Azure网站展示了如何订阅免费的Azure服务,这样你就能够执行书中的示例。
SQL Server的“盒子”特色,正式的称谓是(企业)内部部署的SQL Server,这是传统的部署方式,通常安装在客户场所内。客户负责所有的事情——硬件、安装软件、处理更新、高可用性和灾难恢复(HADR)、安全,以及其他事项。
SQL Server的云扩展是极为重要的一点,你不应错过,我认为这是很重要的。我在做什么,不应该在前言中为另一本书做广告(抱歉,Itzik,我不得不这样做!)。在阅读了Nicholas G. Carr的《大转折》(The Big Switch,W.W. Norton and Company,2009)后,我在云计算方面的的兴趣和信心暴涨,因此我要分享这一感受。这是一本非常好的图书,它介绍了与早期20世纪电气化相比云计算所带来的进展。通过观看James Hamilton在MIX10会议上的演讲,我确信未来的云计算会进一步巩固(录音请访问http://channel9.msdn.com/events/MIX/ MIX10/EX01)。
Itzik提示要注意与云相关的变更:与SQL Server版本间多年的使用间隙相比,随着云的到来这种模式发生了显著变化,相反的是每年在全球Microsoft Data Centers部署的几个较小的云版本(称之为服务更新),因此,Itzik明智地选择了在他的http://tsql.solidq.com网站论述SQL Server和Windows Azure SQL Database的T-SQL差异,而不是在这本书中论述,这样他就能够很方便地保持最新信息。
希望你喜欢这本书──甚至更多──很高兴它带给你对T-SQL的新见解。
Lubor Kollar
SQL Server开发团队
微软公司
目录
第1章 T-SQL查询和编程的背景
1.1理论背景
1.1.1 SQL
1.1.2 集合理论
1.1.3 谓词逻辑
1.1.4 关系模型
1.1.5 数据生命周期
1.2 SQL Server体系结构
1.2.1 SQLServer的ABC特色
1.2.2 SQLServer实例
1.2.3 数据库
1.2.4 架构和对象
1.3创建表和定义数据完整性
1.3.1创建表
1.3.2定义数据完整性
1.4小结
第2章单表查询
2.1 SELECT语句的元素
2.1.1 FROM子句
2.1.2 WHERE子句
2.1.3 GROUP BY子句
2.1.4 HAVING子句
2.1.5 SELECT子句
2.1.6 ORDER BY子句
2.1.7 TOP和OFFSET-FETCH筛选
2.1.8开窗函数速览
2.2谓词和运算符
2.3 CASE表达式
2.4 NULL标记
2.5同时操作
2.6使用字符数据
2.6.1数据类型
2.6.2排序规则
2.6.3运算符和函数
2.7使用日期和时间数据
2.7.1日期和时间数据类型
2.7.2日期和时间常量
2.7.3独立使用日期和时间
2.7.4筛选日期范围
2.7.5日期和时间函数
2.8查询元数据
2.8.1目录视图
2.8.2信息架构视图
2.8.3系统存储过程和函数
2.9结论
2.10练习
2.10.1练习1
2.10.2练习2
2.10.3练习3
2.10.4练习4
2.10.5练习5
2.10.6练习6
2.10.7练习7
2.10.8练习8
2.11解决方案
2.11.1解决方案1
2.11.2解决方案2
2.11.3解决方案3
2.11.4解决方案4
2.11.5解决方案5
2.11.6解决方案6
2.11.7解决方案7
2.11.8解决方案8
第3章联接
3.1交叉联接
3.1.1 ANSI SQL-92语法
3.1.2 ANSI SQL-89语法
3.1.3自交叉联接
3.1.4生成数字表
3.2内部联接
3.2.1 ANSI SQL-92语法
3.2.2 ANSI SQL-89语法
3.2.3内部联接安全性
3.3更多联接示例
3.3.1复合联接
3.3.2不等联接
3.3.3多联接查询
3.4外部联接
3.4.1外部联接的基础知识
3.4.2超越外部联接基础知识
3.5结论
3.6练习
3.6.1.1练习1-1
3.6.1.2练习1-2(可选的高级练习)
3.6.2练习2
3.6.3练习3
3.6.4练习4
3.6.5练习5
3.6.6练习6(可选的高级练习)
3.6.7练习7(可选的高级练习)
3.7解决方案
3.7.1.1解决方案1-1
3.7.1.2解决方案1-2
3.7.2解决方案2
3.7.3解决方案3
3.7.4解决方案4
3.7.5解决方案5
3.7.6解决方案6
3.7.7解决方案7
第4章子查询
4.1自包含子查询
4.1.1自包含标量子查询示例
4.1.2自包含多值子查询示例
4.2相关子查询
4.2.1 EXISTS谓词
4.3超越子查询基础知识
4.3.1返回前一个或下一个值
4.3.2使用运行聚合
4.3.3不当子查询处理
4.4结论
4.5练习
4.5.1练习1
4.5.2练习2(可选的高级练习)
4.5.3练习3
4.5.4练习4
4.5.5练习5
4.5.6练习6
4.5.7练习7(可选的高级练习)
4.5.8练习8(可选的高级练习)
4.6解决方案
4.6.1解决方案1
4.6.2解决方案2
4.6.3解决方案3
4.6.4解决方案4
4.6.5解决方案5
4.6.6解决方案6
4.6.7解决方案7
4.6.8解决方案8
第5章表表达式
5.1派生表
5.1.1分配列别名
5.1.2使用参数
5.1.3嵌套
5.1.4多个引用
5.2公用表表达式
5.2.1在CTE中分配列别名
5.2.2在CTE中使用参数
5.2.3定义多个CTE
5.2.4 CTE中的多个引用
5.2.5递归CTE
5.3视图
5.3.1视图和ORDER BY子句
5.3.2视图选项
5.4内嵌表值函数
5.5 APPLY运算符
5.6结论
5.7练习
5.7.1练习1-1
5.7.2练习1-2
5.7.3练习2-1
5.7.4练习2-2
5.7.5练习3(可选的高级练习)
5.7.6练习4-1
5.7.7练习4-2(可选的高级练习)
5.7.8练习5-1
5.7.9练习5-2
5.8解决方案
5.8.1解决方案1-1
5.8.2解决方案1-2
5.8.3解决方案2 -1
5.8.4解决方案2-2
5.8.5解决方案3
5.8.6解决方案4-1
5.8.7解决方案4-2
5.8.8解决方案5-1
5.8.9解决方案5-2
第6章集合运算符
6.1 UNION运算符
6.1.1 UNION ALL多元集合运算符
6.1.2 UNION非重复项集合运算符
6.2 INTERSECT运算符
6.2.1 INTERSECT非重复项集合运算符
6.2.2 INTERSECT ALL多元集合运算符
6.3 EXCEPT运算符
6.3.1 EXCEPT非重复项集合运算符
6.3.2 EXCEPT ALL多元集合运算符
6.4优先级
6.5规避不支持的逻辑阶段
6.6结论
6.7练习
6.7.1练习1
6.7.2练习2
6.7.3练习3
6.7.4练习4
6.7.5练习5(可选的高级练习)
6.8解决方案
6.8.1解决方案1
6.8.2解决方案2
6.8.3解决方案3
6.8.4解决方案4
6.8.5解决方案5
第7章超越查询基础知识
7.1开窗函数
7.1.2排名开窗函数
7.1.3偏移开窗函数
7.1.4聚合开窗函数
7.2透视数据
7.2.1使用标准SQL透视
7.2.2使用本地T-SQLPIVOT运算符透视
7.3逆透视数据
7.3.1使用标准SQL逆透视
7.3.2使用本地T-SQLUNPIVOT运算符逆透视
7.4分组集
7.4.1 GROUPING SETS从属子句
7.4.2 CUBE从属子句
7.4.3 ROLLUP从属子句
7.4.4 GROUPING和GROUPING_ID函数
7.5结论
7.6练习
7.6.1练习1
7.6.2练习2
7.6.3练习3
7.6.4练习4
7.6.5练习5
7.7解决方案
7.7.1解决方案1
7.7.2解决方案2
7.7.3解决方案3
7.7.4解决方案4
7.7.5解决方案5
第8章数据修改
8.1插入数据
8.1.1 INSERT VALUES语句
8.1.2 INSERT SELECT语句
8.1.3 INSERT EXEC语句
8.1.4 SELECT INTO语句
8.1.5 BULK INSERT语句
8.1.6标识列属性和序列对象
8.2删除数据
8.2.1 DELETE语句
8.2.2 TRUNCATE语句
8.2.3基于联接的DELETE
8.3更新数据
8.3.1 UPDATE语句
8.3.2基于联接的UPDATE
8.3.3赋值UPDATE
8.4合并数据
8.5通过表表达式修改数据
8.6使用TOP和OFFSET-FETCH修改
8.7 OUTPUT子句
8.7.1 INSERT与OUTPUT
8.7.2 DELETE与OUTPUT
8.7.3 UPDATE与OUTPUT
8.7.4 MERGE与OUTPUT
8.7.5可组合的DML
8.8结论
8.9练习
8.9.1练习1
8.9.2练习1-1
8.9.3练习1-2
8.9.4练习1-3
8.9.5练习2
8.9.6练习3
8.9.7练习4
8.9.8练习5
8.9.9练习6
8.10解决方案
8.10.1解决方案1-1
8.10.2解决方案1-2
8.10.3解决方案1-3
8.10.4解决方案2
8.10.5解决方案3
8.10.6解决方案4
8.10.7解决方案5
第9章事务和并发处理
9.1事务
9.2锁和阻塞
9.2.1锁
9.2.2排除阻塞
9.3隔离级别
9.3.1 READ UNCOMMITTED隔离级别
9.3.2 READ COMMITTED隔离级别
9.3.3 REPEATABLE READ隔离级别
9.3.4 SERIALIZABLE隔离级别
9.3.5基于行版本的隔离级别
9.3.6隔离级别总结
9.4死锁
9.5结论
9.6练习
9.6.1练习1-1
9.6.2练习1-2
9.6.3练习1-3
9.6.4练习1-4
9.6.5练习1-5
9.6.6. 1-6
9.6.7练习2-1
9.6.8练习2-2
9.6.9练习2-3
9.6.10练习2-4
9.6.11练习2-5
9.6.12练习2-6
9.6.13练习3-1
9.6.14练习3-2
9.6.15练习3-3
9.6.16练习3-4
9.6.17练习3-5
9.6.18练习3-6
9.6.19练习3-7
第10章可编程对象
10.1变量
10.2批
10.2.1以批为单元的语法分析
10.2.2批和变量
10.2.3不能被组合在同一个批中的语句
10.2.4以批为单元的解析
10.2.5 GO n选项
10.3流元素
10.3.1 IF . . . ELSE流元素
10.3.2 WHILE流元素
10.3.3使用IF和WHILE的示例
10.4游标
10.5临时表
10.5.1本地临时表
10.5.2全局临时表
10.5.3表变量
10.5.4表类型
10.6动态SQL
10.6.1 EXEC命令
10.6.2 sp_executesql存储过程
10.6.3使用动态SQL的PIVOT
10.7例程
10.7.1用户定义函数
10.7.2存储过程
10.7.3触发器
10.8错误处理
10.9结论
附录:入门指南
附录1 SQL Database入门
附录2安装(企业)内部部署的SQLServer
1.获取SQLServer
2.创建一个用户帐户
3.安装的必要条件
4.安装数据库引擎、文档和工具
附录3下载源代码和安装示例数据库
附录4使用SQL ServerManagement Studio
附录5使用SQL Server联机丛书