[置顶] 图书推荐:SQL Server 2012 T-SQL基础 Itzik Ben-Gan
经过近三个月的不懈努力,终于翻译完毕了。图书虽然是基础知识,但是,即使你已经使用T-SQL几年,很多地方还是能够弥补你的知识空白。大师级的人物写基础知识,或许你想知道这基础中还有哪些深奥,敬请期待吧。
这次是邮电出版社负责组织翻译的,非常感谢杜洁女士的努力,才使得这样精彩的东西能够与国人有缘。
前言
很高兴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联机丛书
[置顶] 图书推荐:SQL Server 2012 T-SQL基础 Itzik Ben-Gan的更多相关文章
- SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第1部分)
为了缩小读取操作所涉及范围,本文首先着眼于简单的SELECT查询,然后引入执行更新操作有关的附加过程.最后你会读到,优化性能时SQLServer使用还原工具的相关术语和流程. 关系和存储引擎 如图所示 ...
- SQL Sever 各版本下载 SQL Server 2012下载SQL Server 2008下载SQL Server 2005
SQL Server 2012SQL Server 2012 开发版(DVD)(X64,X86)(中文简体)ed2k://|file|cn_sql_server_2012_developer_edit ...
- sql server 2012 导出sql文件
导出表数据和表结构sql文件 在工作中,经常需要导出某个数据库中,某些表数据:或者,需要对某个表的结构,数据进行修改的时候,就需要在数据库中导出表的sql结构,包括该表的建表语句和数据存储语句!在这个 ...
- SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第2部分)
计划缓存(Plan Cache) 如果SQL Server已经找到一个好的方式去执行一段代码时,应该把它作为随后的请求重用,因为生成执行计划是耗费时间且资源密集的,这样做是有有意义的. 如果没找到被缓 ...
- SQL Server 2012:SQL Server体系结构——一个查询的生命周期(第3部分)(完结)
一个简单的更新查询 现在应该知道只读取数据的查询生命周期,下一步来认定当你需要更新数据时会发生什么.这个部分通过看一个简单的UPDATE查询,修改刚才例子里读取的数据,来回答. 庆幸的是,直到存取方法 ...
- SQL Server 2012 - 动态SQL查询
动态SQL的两种执行方式:EXEC @sql 和 EXEC sys.sp_executesql @sql DECLARE @c_ids VARCHAR(200) SET @c_ids ='1,2' - ...
- SQL Server 2012 - 数据库的基础操作
数据库基本操作 --新建数据库卡 use master go create database SchoolDB on ( Name=SchoolDB, FileName='D;\DB\SchoolDB ...
- Win7 安装SQL SERVER 2012需要SP1补丁
在操作系统Win7上安装SQL Server 2012时,报如下错误: 也就是说SQL Server 2012如要要安装在Windows 7 上,则至少需要安装SP1补丁.否则就会弹出上面提示信息.关 ...
- 安装 SQL Server 2012 的硬件和软件要求(官方全面)
以下各节列出了安装和运行 SQL Server 2012 的最低硬件和软件要求. 有关 SharePoint 集成模式下 Analysis Services 的要求的详细信息,请参阅硬件和软件要求(S ...
随机推荐
- Android学习笔记(十五)——碎片的生命周期(附源代码)
碎片的生命周期 点击下载源代码 与活动类似.碎片具有自己的生命周期.理解了碎片的生命周期后.我们能够在碎片被销毁时正确地保存事实上例,在碎片被重建时将其还原到前一个状态. 1.使用上一篇的项目Frag ...
- Android 中文API (69) —— BluetoothAdapter[蓝牙]
前言 本章内容是 android.bluetooth.BluetoothAdapter,为Android蓝牙部分的章节翻译.本地蓝牙设备的适配类,所有的蓝牙操作都要通过该类完成.版本为 Androi ...
- GCC编译四阶段
Linux下程序编译的四个阶段:预处理.编译.汇编.链接 GCC: GUN C Compiler 但现在不只局限于c语言 预处理(Preprocessing): gcc -E hello.c - ...
- html相关介绍
HTML(超文本标记语言) 超文本标记语言,即HTML(Hypertext Markup Language),是用于描述网页文档的一种标记语言 XHTML1.0 可扩展超文本置标语言(eXtensi ...
- C++之对象存储空间_对象模型
C++编译器如何完成面向对象理论向计算机程序的转化 #include<stdio.h>//////c++对象模型和结构体一样 class Test { ...
- 杭电ACM水仙花数
水仙花数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- BZOJ 100题留念
- 在myeclipse中修改svn帐户
把C:\Users\Administrator\AppData\Roaming\Subversion\auth\这个文件中所有文件删除 然后在myeclipse中同步会让你输入用户名和密码
- windows apache 配置多个服务 站点 Apache Service Monitor
把Apache安装为多个Window NT服务 ~~~ 可以在 services.msc中查看到1. 在DOS下跳到Apache安装目录里的bin目录(~~~或者用path命令 把apache的安装目 ...
- 转:C++:从子类访问父类的私有函数
众所周知,c和c++的数组都是不安全的,因为无论c还是c++都不提供数组边界检查功能,这使得数组溢出成为可能.从某个意义上说,c和c++是一种缺少监督的语言,然而这也正是其魅力所在.c++给予程序员更 ...