第1章 T-SQL查询和编程的背景 1
1.1理论背景 1
1.1.1 SQL 2
1.1.2集合理论 3
1.1.3谓词逻辑 4
1.1.4关系模型 4
1.1.5数据生命周期 9
1.2 SQL Server体系结构 12
1.2.1SQL Server的ABC特色 12
1.2.2SQL Server实例 13
1.2.3数据库 15
1.2.4架构和对象 18
1.3创建表和定义数据完整性 18
1.3.1创建表 19
1.3.2定义数据完整性 20
1.4小结 24
第2章 单表查询 25
2.1 SELECT语句的元素 25
2.1.1 FROM子句 27
2.1.2 WHERE子句 28
2.1.3 GROUP BY子句 30
2.1.4 HAVING子句 33
2.1.5 SELECT子句 34
2.1.6 ORDER BY子句 39
2.1.7 TOP和OFFSET-FETCH筛选 41
2.1.8开窗函数速览 45
2.2谓词和运算符 47
2.3 CASE表达式 50
2.4 NULL标记 52
2.5同时操作 56
2.6使用字符数据 57
2.6.1数据类型 57
2.6.2排序规则 58
2.6.3运算符和函数 60
2.7使用日期和时间数据 69
2.7.1日期和时间数据类型 69
2.7.2日期和时间常量 70
2.7.3独立使用日期和时间 73
2.7.4筛选日期范围 74
2.7.5日期和时间函数 75
2.8查询元数据 83
2.8.1目录视图 83
2.8.2信息架构视图 84
2.8.3系统存储过程和函数 85
2.9小结 86
2.10练习 86
2.10.1练习1 86
2.10.2练习2 87
2.10.3练习3 87
2.10.4练习4 87
2.10.5练习5 88
2.10.6练习6 88
2.10.7练习7 89
2.10.8练习8 89
2.11解决方案 90
2.11.1解决方案1 90
2.11.2解决方案2 91
2.11.3解决方案3 91
2.11.4解决方案4 91
2.11.5解决方案5 92
2.11.6解决方案6 92
2.11.7解决方案7 92
2.11.8解决方案8 93
第3章 联接 95
3.1交叉联接 95
3.1.1 ANSI SQL-92语法 96
3.1.2 ANSI SQL-89语法 97
3.1.3自交叉联接 97
3.1.4生成数字表 98
3.2内部联接 99
3.2.1 ANSI SQL-92语法 99
3.2.2 ANSI SQL-89语法 100
3.2.3内部联接安全性 101
3.3更多联接示例 102
3.3.1复合联接 102
3.3.2不等联接 103
3.3.3多联接查询 105
3.4外部联接 105
3.4.1外部联接的基础知识 106
3.4.2超越外部联接基础知识 108
3.5小结 114
3.6练习 115
3.6.1练习1-1 115
3.6.2练习1-2(可选的高级练习) 116
3.6.3练习2 117
3.6.4练习3 117
3.6.5练习4 118
3.6.6练习5 118
3.6.7练习6(可选的高级练习) 119
3.6.8练习7(可选的高级练习) 119
3.7解决方案 120
3.7.1解决方案1-1 120
3.7.2解决方案1-2 120
3.7.3解决方案2 121
3.7.4解决方案3 121
3.7.5解决方案4 122
3.7.6解决方案5 122
3.7.7解决方案6 122
3.7.8解决方案7 123
第4章 子查询 125
4.1自包含子查询 125
4.1.1自包含标量子查询示例 126
4.1.2自包含多值子查询示例 128
4.2相关子查询 131
4.2.1 EXISTS谓词 133
4.3超越子查询基础知识 135
4.3.1返回前一个或下一个值 135
4.3.2使用运行聚合 136
4.3.3不当子查询处理 137
4.4小结 141
4.5练习 142
4.5.1练习1 142
4.5.2练习2(可选的高级练习) 142
4.5.3练习3 143
4.5.4练习4 143
4.5.5练习5 144
4.5.6练习6 144
4.5.7练习7(可选的高级练习) 145
4.5.8练习8(可选的高级练习) 145
4.6解决方案 146
4.6.1解决方案1 146
4.6.2解决方案2 146
4.6.3解决方案3 147
4.6.4解决方案4 147
4.6.5解决方案5 148
4.6.6解决方案6 148
4.6.7解决方案7 148
4.6.8解决方案8 149
第5章 表表达式 151
5.1派生表 151
5.1.1分配列别名 153
5.1.2使用参数 154
5.1.3嵌套 155
5.1.4多个引用 156
5.2公用表表达式 157
5.2.1在CTE中分配列别名 157
5.2.2在CTE中使用参数 158
5.2.3定义多个CTE 158
5.2.4 CTE中的多个引用 159
5.25递归CTE 160
5.3视图 162
5.3.1视图和ORDER BY子句 163
5.3.2视图选项 165
5.4内嵌表值函数 169
5.5 APPLY运算符 170
5.6小结 173
5.7练习 174
5.7.1练习1-1 174
5.7.2练习1-2 174
5.7.3练习2-1 175
5.7.4练习2-2 175
5.7.5练习3(可选的高级练习) 176
5.7.6练习4-1 176
5.7.7练习4-2(可选的高级练习) 177
5.7.8练习5-1 178
5.7.9练习5-2 178
5.8解决方案 179
5.8.1解决方案1-1 179
5.8.2解决方案1-2 179
5.8.3解决方案2-1 179
5.8.4解决方案2-2 180
5.8.5解决方案3 180
5.8.6解决方案4-1 181
5.8.7解决方案4-2 181
5.8.8解决方案5-1 182
5.8.9解决方案5-2 182
第6章 集合运算符 183
6.1 UNION运算符 184
6.1.1 UNION ALL多元集合运算符 184
6.1.2 UNION非重复项集合运算符 185
6.2 INTERSECT运算符 186
6.2.1 INTERSECT非重复项集合运算符 186
6.2.2 INTERSECT ALL多元集合运算符 187
6.3 EXCEPT运算符 189
6.3.1 EXCEPT非重复项集合运算符 189
6.3.2 EXCEPT ALL多元集合运算符 190
6.4优先级 191
6.5规避不支持的逻辑阶段 193
6.6小结 195
6.7练习 195
6.7.1练习1 195
6.7.2练习2 196
6.7.3练习3 197
6.7.4练习4 197
6.7.5练习5(可选的高级练习) 198
6.8解决方案 199
6.8.1解决方案1 199
6.8.2解决方案2 200
6.8.3解决方案3 200
6.8.4解决方案4 200
6.8.5解决方案5 201
第7章 查询 203
7.1开窗函数 203
7.1.1排名开窗函数 206
7.1.2偏移开窗函数 209
7.1.3聚合开窗函数 212
7.2透视数据 214
7.2.1使用标准SQL透视 216
7.2.2使用本地T-SQL PIVOT运算符透视 217
7.3逆透视数据 219
7.3.1使用标准SQL逆透视 221
7.3.2使用本地T-SQL UNPIVOT运算符逆透视 222
7.4分组集 223
7.4.1 GROUPING SETS从属子句 225
7.4.2 CUBE从属子句 225
7.4.3 ROLLUP从属子句 226
7.4.4 GROUPING和GROUPING_ID函数 227
7.5小结 229
7.6练习 230
7.6.1练习1 230
7.6.2练习2 230
7.6.3练习3 231
7.6.4练习4 231
7.6.5练习5 232
7.7解决方案 233
7.7.1解决方案1 233
7.7.2解决方案2 233
7.7.3解决方案3 234
7.7.4解决方案4 235
7.7.5解决方案5 236
第8章 数据修改 237
8.1插入数据 237
8.1.1 INSERT VALUES语句 237
8.1.2 INSERT SELECT语句 239
8.1.3 INSERT EXEC语句 239
8.1.4 SELECT INTO语句 240
8.1.5 BULK INSERT语句 241
8.1.6标识列属性和序列对象 242
8.2删除数据 250
8.2.1 DELETE语句 251
8.2.2 TRUNCATE语句 252
8.2.3基于联接的DELETE 252
8.3更新数据 253
8.3.1 UPDATE语句 254
8.3.2基于联接的UPDATE 255
8.3.3赋值UPDATE 258
8.4合并数据 259
8.5通过表表达式修改数据 263
8.6使用TOP和OFFSET-FETCH修改 265
8.7 OUTPUT子句 268
8.7.1 INSERT与OUTPUT 268
8.7.2 DELETE与OUTPUT 270
8.7.3 UPDATE与OUTPUT 271
8.7.4 MERGE与OUTPUT 272
8.7.5可组合的DML 273
8.8小结 275
8.9练习 275
8.9.1练习1 275
8.9.2练习1-1 275
8.9.3练习1-2 276
8.9.4练习1-3 276
8.9.5练习2 276
8.9.6练习3 277
8.9.7练习4 277
8.9.8练习5 278
8.9.9练习6 279
8.10解决方案 279
8.10.1解决方案1-1 279
8.10.2解决方案1-2 279
8.10.3解决方案1-3 279
8.10.4解决方案2 280
8.10.5解决方案3 281
8.10.6解决方案4 282
8.10.7解决方案5 282
第9章 事务和并发处理 285
9.1事务 285
9.2锁和阻塞 288
9.2.1锁 288
9.2.2排除阻塞 290
9.3隔离级别 297
9.3.1 READ UNCOMMITTED隔离级别 298
9.3.2 READ COMMITTED隔离级别 299
9.3.3 REPEATABLE READ隔离级别 300
9.3.4 SERIALIZABLE隔离级别 302
9.3.5基于行版本的隔离级别 303
9.3.6隔离级别总结 309
9.4死锁 310
9.5小结 312
9.6练习 312
9.6.1练习1-1 313
9.6.2练习1-2 313
9.6.3练习1-3 313
9.6.4练习1-4 313
9.6.5练习1-5 314
9.6.6练习1-6 314
9.6.7练习2-1 315
9.6.8练习2-2 315
9.6.9练习2-3 316
9.6.10练习2-4 317
9.6.11练习2-5 319
9.6.12练习2-6 320
9.6.13练习3-1 322
9.6.14练习3-2 322
9.6.15练习3-3 322
9.6.16练习3-4 322
9.6.17练习3-5 322
9.6.18练习3-6 323
9.6.19练习3-7 323
第10章 可编程对象 325
10.1变量 325
10.2批 327
10.2.1以批为单元的语法分析 328
10.2.2批和变量 329
10.2.3不能被组合在同一个批中的语句 329
10.2.4以批为单元的解析 330
10.2.5 GO n选项 330
10.3流元素 331
10.3.1 IF…ELSE流元素 331
10.3.2 WHILE流元素 332
10.3.3使用IF和WHILE的示例 334
10.4游标 334
10.5临时表 338
10.5.1本地临时表 338
10.5.2全局临时表 340
10.5.3表变量 341
10.5.4表类型 343
10.6动态SQL 344
10.6.1 EXEC命令 344
10.6.2 sp_executesql存储过程 345
10.6.3使用动态SQL的PIVOT 346
10.7例程 347
10.7.1用户定义函数 347
10.7.2存储过程 349
10.7.3触发器 351
10.8错误处理 355
10.9小结 359
附录A 入门指南 361
A.1 SQL Database入门 361
A.2安装(企业)内部部署的SQL Server 362
A.2.1获取SQL Server 362
A.2.2创建一个用户账户 362
A.2.3安装的必要条件 363
A.2.4安装数据库引擎、文档和工具 364
A.3下载源代码和安装示例数据库 371
A.3.1在(企业)内部部署的SQL Server实例中创建并填充示例数据库 371
A.3.2在SQL Database中创建并填充示例数据库 371
A.4使用SQL Server Management Studio 373
A.5使用SQL Server联机丛书 378