目 录
第 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.1 SQL Server的ABC特色 12
1.2.2 SQL 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.2.5 递归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