第一部分 引言 2
第1章 SQL简介 2
1.1 简介 2
1.2 数据库、数据库服务器和数据库语言 2
1.3 关系模型 3
1.4 什么是SQL 6
1.5 SQL应用程序的类别 9
1.6 SQL简史 12
1.7 整体式、客户/服务器与Internet体系结构 12
1.8 事务数据库和数据仓库 14
1.9 SQL的标准化 15
1.10 SQL数据库服务器的市场 18
1.11 SQL版本 19
1.12 本书的结构 19
第2章 网球俱乐部示例数据库 21
2.1 简介 21
2.2 网球俱乐部的描述 21
2.3 表的内容 23
2.4 完整性约束 25
第3章 安装软件 27
3.1 简介 27
3.2 安装MySQL 27
3.3 安装ODBC 33
3.4 安装WinSQL 36
3.5 从网站上下载SQL语句 42
3.6 准备 43
第4章 SQL概览 44
4.1 简介 44
4.2 登录到MySQL数据库服务器 44
4.3 创建新SQL用户 45
4.4 创建数据库 46
4.5 选择当前数据库 47
4.6 创建表 47
4.7 NULL值 48
4.8 使用数据填充表 49
4.9 查询表 50
4.10 更新与删除行 52
4.11 使用索引优化查询过程 53
4.12 视图 53
4.13 用户和数据安全 54
4.14 删除数据库对象 55
4.15 系统参数 55
4.16 SQL语句分组 56
4.17 目录表 56
4.18 SQL语句的定义 59
第二部分 查询与更新数据 62
第5章 SELECT语句:共用元素 62
5.1 简介 62
5.2 常量及其数据类型 62
5.3 表达式 67
5.4 对结果列指派名称 68
5.5 列规范 70
5.6 用户变量和SET语句 71
5.7 系统变量 72
5.8 条件表达式 72
5.9 括号内的标量表达式 76
5.10 标量函数 76
5.11 情形表达式 79
5.12 NULL值作为表达式 80
5.13 复合标量表达式 81
5.14 聚合函数和标量子查询 88
5.15 行表达式 89
5.16 表表达式 90
5.17 答案 90
第6章 SELECT语句、表表达式和子查询 94
6.1 简介 94
6.2 SELECT语句的定义 94
6.3 处理选择块中的从句 96
6.4 表表达式的可能形式 100
6.5 SELECT语句 102
6.6 子查询 102
6.7 答案 106
第7章 SELECT语句:FROM从句 110
7.1 简介 110
7.2 FROM从句中的表规范 110
7.3 列规范 111
7.4 FROM从句中的多个表规范 112
7.5 表名的假名 115
7.6 连接的几个示例 115
7.7 假名的强制使用 117
7.8 FROM从句中的显式连接 119
7.9 使用USING连接 122
7.10 外连接 122
7.11 连接语句中的其他条件 127
7.12 交叉连接 128
7.13 联合连接与自然连接 129
7.14 等于连接和theta连接 129
7.15 带有表表达式的FROM从句 130
7.16 答案 135
第8章 SELECT语句:WHERE从句 139
8.1 简介 139
8.2 使用比较运算符的条件 140
8.3 带子查询的比较运算符 143
8.4 带相关子查询的比较运算符 147
8.5 耦合有AND,OR和NOT的条件 148
8.6 带表达式列表的IN运算符 150
8.7 带子查询的IN运算符 154
8.8 BETWEEN运算符 160
8.9 LIKE运算符 162
8.10 IS NULL运算符 164
8.11 EXISTS运算符 165
8.12 ALL和ANY运算符 167
8.13 子查询中列的范围 173
8.14 相关子查询的更多示例 176
8.15 否定条件 180
8.16 未来条件 182
8.17 答案 184
第9章 SELECT语句:SELECT从句和聚合函数 191
9.1 简介 191
9.2 选择所有列(*) 191
9.3 SELECT从句中的表达式 192
9.4 使用DISTINCT删除重复的行 192
9.5 何时两行相等 195
9.6 聚合函数简介 196
9.7 COUNT函数 198
9.8 MAX和MIN函数 200
9.9 SUM和AVG函数 203
9.10 VARIANCE和STDDEV函数 206
9.11 答案 207
第10章 SELECT语句:GROUP BY从句 211
10.1 简介 211
10.2 组合一列 211
10.3 组合两列或多列 214
10.4 按表达式进行组合 216
10.5 按NULL值进行组合 217
10.6 GROUP BY从句的通用规则 217
10.7 使用GROUP BY的复杂示例 219
10.8 使用WITH ROLLUP进行组合 223
10.9 使用WITH CUBE组合 224
10.10 组合集 225
10.11 使用ROLLUP和CUBE组合 228
10.12 合并组合集 231
10.13 答案 232
第11章 SELECT语句:HAVING从句 235
11.1 简介 235
11.2 HAVING从句示例 236
11.3 HAVING从句的通用规则 237
11.4 答案 237
第12章 SELECT语句:ORDER BY从句 239
12.1 简介 239
12.2 按列名排序 239
12.3 按表达式排序 240
12.4 按序号及列标题排序 242
12.5 按升序或降序排序 243
12.6 NULL值排序 244
12.7 答案 245
第13章 合并表表达式 246
13.1 简介 246
13.2 使用UNION合并 246
13.3 使用UNION的规则 248
13.4 使用INTERSECT合并 251
13.5 使用EXCEPT合并 253
13.6 保留重复的行 255
13.7 集合运算符与NULL值 256
13.8 合并多个集合运算符 256
13.9 集合运算符与集合论 257
13.10 答案 259
第14章 更新表 261
14.1 简介 261
14.2 插入新行 261
14.3 使用来自另一个表的行来填充一个表 263
14.4 更新行中的值 264
14.5 从表中删除行 267
14.6 答案 268
第三部分 创建数据库对象 270
第15章 创建表 270
15.1 简介 270
15.2 创建新表 270
15.3 列的数据类型 272
15.4 创建临时表 276
15.5 复制表 277
15.6 对表和列命名 280
15.7 列选项:默认值与注释 281
15.8 派生列 282
15.9 表和目录 283
15.10 答案 285
第16章 指定完整性约束 286
16.1 简介 286
16.2 主键 287
16.3 交换键 288
16.4 外键 289
16.5 引用动作 292
16.6 检查完整性约束 294
16.7 命名完整性约束 295
16.8 删除完整性约束 296
16.9 完整性约束与目录 296
16.10 答案 296
第17章 字符集与整理序列 298
17.1 简介 298
17.2 可用的字符集与整理序列 299
17.3 为列指定字符集 300
17.4 为列指派整理序列 301
17.5 带字符集和整理序列的表达式 302
17.6 使用整理序列排序与组合 304
17.7 表达式的可压缩性 305
17.8 相关的系统变量 306
17.9 答案 307
第18章 更改和删除表 308
18.1 简介 308
18.2 删除整个表 308
18.3 重命名表 308
18.4 更改表的结构 309
18.5 更改列 310
18.6 更改完整性约束 312
18.7 答案 313
第19章 设计表 314
19.1 简介 314
19.2 确定表与列 314
19.3 添加冗余数据 318
19.4 为列选择数据类型 319
19.5 何时使用NOT NULL 320
19.6 答案 320
第20章 使用索引 322
20.1 简介 322
20.2 行、表与文件 322
20.3 索引的工作原理 323
20.4 SELECT语句的处理:步骤 326
20.5 创建索引 329
20.6 删除索引 330
20.7 索引和主键 331
20.8 大PLAYERS_XXL表 331
20.9 为索引选择列 333
20.10 特殊的索引形式 335
20.11 索引与目录 338
20.12 答案 339
第21章 视图 341
21.1 简介 341
21.2 创建视图 341
21.3 视图的列名 343
21.4 更新视图:WITH CHECK OPTION 344
21.5 删除视图 345
21.6 视图与目录 345
21.7 查询视图的限制 346
21.8 更新视图的限制 347
21.9 处理视图语句 348
21.10 视图的应用领域 349
21.11 答案 353
第22章 创建数据库 354
22.1 简介 354
22.2 数据库与目录 354
22.3 创建数据库 355
22.4 更新数据库 355
22.5 删除数据库 356
第23章 用户和数据安全 357
23.1 简介 357
23.2 添加和删除用户 357
23.3 授予表和列以权限 359
23.4 授予数据库权限 361
23.5 授予用户权限 362
23.6 传递权限:WITH GRANT OPTION 364
23.7 角色处理 364
23.8 在目录中记录权限 365
23.9 撤销权限 368
23.10 视图的安全 370
23.11 答案 371
第24章 创建序列 372
24.1 简介 372
24.2 为何需要序列 372
24.3 序列的选项 374
24.4 检索上一个生成的数字 377
24.5 更改和删除序列 378
24.6 序列的权限 378
24.7 答案 379
第25章 创建方案 380
25.1 什么是方案 380
25.2 创建方案 380
25.3 删除方案 381
25.4 方案与SQL用户 382
第四部分 SQL编程 384
第26章 嵌入式SQL简介 384
26.1 简介 384
26.2 伪编程语言 384
26.3 DDL和DCL语句以及嵌入式SQL 384
26.4 处理程序 385
26.5 在SQL中使用宿主变量 387
26.6 SQLCODE宿主变量 388
26.7 可执行与不可执行SQL语句 389
26.8 WHENEVER语句 389
26.9 登录到SQL 392
26.10 返回一行的SELECT语句 393
26.11 NULL值和NULL指示符 395
26.12 查询多行的游标 396
26.13 浏览游标的方向 400
26.14 游标处理 400
26.15 FOR从句 402
26.16 通过游标删除行 403
26.17 动态SQL 404
26.18 一个C程序的例子 406
第27章 事务与多用户用途 408
27.1 简介 408
27.2 什么是事务 408
27.3 开始事务 411
27.4 嵌入式SQL和事务 412
27.5 恢复点 413
27.6 多用户用途的问题 414
27.7 锁定 417
27.8 死锁 417
27.9 已锁定数据的粒度 417
27.10 LOCK TABLE语句 418
27.11 隔离级别 418
27.12 答案 420
第28章 ODBC简介 421
28.1 简介 421
28.2 ODBC简史 421
28.3 ODBC的工作原理 422
28.4 ODBC的一个简单示例 424
28.5 返回码 426
28.6 检索关于SQL的数据 427
28.7 DDL语句和ODBC 427
28.8 DML语句和ODBC 429
28.9 在SQL中使用宿主变量 429
28.10 语句句柄的设置 432
28.11 SELECT语句 432
28.12 SQL语句的异步处理 438
28.13 FOR从句 441
28.14 使用ODBC访问目录表 443
28.15 级别和支持 444
28.16 ODBC的竞争者 444
第29章 语句的优化 446
29.1 简介 446
29.2 避免OR操作 446
29.3 避免UNION运算符的不必要使用 447
29.4 避免使用NOT运算符 448
29.5 隔离条件中的列 448
29.6 使用BETWEEN运算符 449
29.7 避免LIKE运算符的特殊形式 449
29.8 向连接添加冗余条件 449
29.9 避免HAVING从句 450
29.10 尽可能使SELECT从句小一些 450
29.11 避免DISTINCT 450
29.12 使用集合运算符的ALL选项 451
29.13 使用外连接而不是UNION运算符 451
29.14 避免数据类型转换 451
29.15 最后指定最大的表 452
29.16 避免ANY和ALL运算符 452
29.17 优化程序的未来 454
29.18 答案 454
第五部分 过程数据库对象 458
第30章 存储过程 458
30.1 简介 458
30.2 存储过程的一个示例 458
30.3 存储过程的参数 460
30.4 存储过程的过程体 461
30.5 局部变量 462
30.6 SET语句 464
30.7 流控制语句 464
30.8 调用存储过程 469
30.9 使用SELECT INTO语句的存储过程 471
30.10 错误消息、处理程序和条件 473
30.11 带有游标的存储过程 476
30.12 存储过程与事务 478
30.13 存储过程与目录 479
30.14 删除存储过程 480
30.15 编译与重新编译 480
30.16 存储过程的安全 481
30.17 存储过程的优点 481
第31章 存储函数 483
31.1 简介 483
31.2 存储函数的例子 483
31.3 删除存储函数 486
第32章 触发器 487
32.1 简介 487
32.2 触发器的一个示例 487
32.3 更复杂的例子 489
32.4 作为完整性约束的触发器 493
32.5 删除触发器 494
32.6 SQL产品间的区别 495
32.7 答案 495
第六部分 对象关系概念 498
第33章 用户定义数据类型、函数和运算符 498
33.1 简介 498
33.2 创建用户定义数据类型 498
33.3 访问数据类型 499
33.4 值的情形表达 500
33.5 创建用户定义的运算符 501
33.6 不透明的数据类型 502
33.7 命名行数据类型 502
33.8 类型表 505
33.9 数据类型的完整性约束 505
33.10 键和索引 506
33.11 答案 506
第34章 继承、引用和集合 507
34.1 数据类型的继承 507
34.2 通过行标识链接表 508
34.3 集合 512
34.4 表的继承 516
第35章 SQL之未来 519
附录A SQL的语法 520
附录B 标量函数 548
附录C 参考文献 573