前言 1
第1部分 SQL的基本概念和原理 5
第1章 SQL和关系型数据库管理系统 7
1.1 理想的数据库特征 7
1.1.1 充足的容量 7
1.1.2 足够的安全 8
1.1.3 多用户环境 8
1.1.4 效率 8
1.1.5 可伸缩性 8
1.1.6 用户友好 8
1.2 选择数据库软件 9
1.2.1 市场份额 9
1.2.2 所有权的总成本 9
1.2.3 支持和持续 10
1.3 一切的细节:DBMS实现 10
1.4 现实中的数据库例子 11
1.4.1 订购管理系统数据库 11
1.4.2 健康护理提供者数据库 12
1.4.3 科学数据库 12
1.4.4 非盈利组织数据库 13
1.5 旧有数据库 13
1.5.1 平面文件数据库 13
1.5.2 层次数据库 14
1.5.3 网状数据库 15
1.6 关系型数据库 16
1.6.1 表 16
1.6.2 关系 17
1.6.3 主键 18
1.6.4 外键 18
1.6.5 RDBMS的发展 19
1.7 对象数据库和对象关系型数据库模型 19
1.8 SQL和SQL标准简史 20
1.8.1 卑微的开始:RDBMS和SQL的演变 20
1.8.2 SQL标准简史 22
1.9 小结 24
第2章 SQL基本概念和原理 25
2.1 SQL标准回顾 25
2.2 SQL初探 28
2.2.1 数据库范例 28
2.2.2 获取和导出数据 29
2.2.3 从不同的角度查看数据 31
2.2.4 聚合 32
2.2.5 数据安全 33
2.2.6 从客户端应用程序访问数据 34
2.2.7 新的发展 34
2.3 平台无关性 35
2.4 小结 37
第3章 SQL数据类型 39
3.1 字符串与二进制串 40
3.1.1 字符串 40
3.1.2 二进制串 46
3.2 数字 48
3.2.1 精确的数字 48
3.2.2 近似的数字 51
3.3 日期和时间数据类型 52
3.3.1 复杂数据类型入门 52
3.3.2 日期和时间实现 53
3.4 对象和用户定义的数据类型 58
3.4.1 SQL99 59
3.4.2 Oracle 9i 59
3.4.3 DB2 UDB 8.1 61
3.5 其他数据类型 62
3.5.1 BOOLEAN 62
3.5.2 ROWID 63
3.5.3 UROWID 63
3.5.4 BFILE 63
3.5.5 DATALINK 63
3.5.6 BIT 63
3.5.7 TIMESTAMP 63
3.6 NULL 64
3.7 小结 64
第2部分 创建和修改数据库对象 65
第4章 创建RDBMS对象 67
4.1 表 67
4.1.1 CREATE TABLE语句 68
4.2 索引 88
4.2.1 CREATE INDEX语句 90
4.3 视图 93
4.3.1 CREATE VIEW语句 93
4.3.2 创建复杂视图 98
4.4 别名和同义词 100
4.4.1 SQL99 102
4.4.2 Oracle 9i的CREATE SYNONYM语句 102
4.4.3 DB2 UDB 8.1 的CREATE ALIAS/SYNONYM语句 103
4.4.4 MS SQL Server 2000 103
4.5 模式 103
4.5.1 CREATE SCHEMA语句 103
4.6 其他SQL99和实现专有的对象 107
4.6.1 SQL99中的域 107
4.6.2 表空间和文件组 107
4.6.3 序列 109
4.6.4 物化视图(Oracle 9i) 114
4.6.5 数据库链接(Oracle 9i) 115
4.7 CREATE语句交叉参考 116
4.8 小结 118
第5章 修改和删除RDBMS对象 119
5.1 表 119
5.1.1 ALTER TABLE语句 119
5.1.2 DROP TABLE语句 127
5.2 索引 129
5.2.1 Oracle 9i中的ALTER INDEX语句 129
5.2.2 DROP INDEX语句 130
5.3 视图 131
5.3.1 ALTER VIEW语句 131
5.3.2 DROP VIEW语句 132
5.4 别名和同义词 133
5.5 模式 134
5.6 其他实现专有的对象 134
5.6.1 表空间 134
5.6.2 序列 136
5.7 ALTER和DROP语句交叉参考 137
5.8 小结 139
第3部分 数据操作和事务控制 141
第6章 数据操作语言 143
6.1 INSERT:用数据来填充表 143
6.1.1 一般的INSERT语句子句 144
6.1.2 与开发商有关的特殊的INSERT语句 151
6.2 UPDATE:更新表的数据 155
6.2.1 一般的UPDATE语句子句 156
6.2.2 开发商特有的UPDATE语句细节 159
6.3 DELETE:从表中删除数据 160
6.3.1 一般的DELETE语句子句 161
6.3.2 开发商特有的DELETE语句子句 163
6.4 其他用于操作数据的SQL语句 163
6.4.1 MERGE语句 163
6.4.2 TRUNCATE语句 164
6.5 小结 165
第7章 会话. 事务和锁定 167
7.1 会话 167
7.2 事务 174
7.2.1 什么是一个事务 174
7.2.2 事务的COMMIT和ROLLBACK 175
7.2.3 事务隔离级别 180
7.3 理解锁定 182
7.3.1 锁定模式 183
7.3.2 处理死锁 185
7.4 小结 186
第4部分 检索和转换数据 187
第8章 理解SELECT语句 189
8.1 单一表SELECT语句语法 189
8.2 SELECT子句:到底要选择什么 190
8.2.1 单一列选择 190
8.2.2 多列SELECT 190
8.2.3 使用字面值. 函数和计算列 193
8.2.4 在一个SELECT子句中使用子查询 197
8.3 FROM子句 198
8.3.1 从表和视图中选择 198
8.3.2 在一个FROM子句中使用别名 198
8.3.3 在一个FROM子句中使用子查询 199
8.4 WHERE子句:设置水平限制 200
8.4.1 使用比较运算符 200
8.4.2 复合运算符:使用AND和OR 201
8.4.3 使用BETWEEN运算符 202
8.4.4 使用IN运算符:设置成员资格测试 203
8.4.5 使用IS NULL运算符:针对NULL的专门测试 204
8.4.6 在一个WHERE子句中使用子查询 205
8.5 GROUP BY和HAVING子句:汇总结果 208
8.6 ORDER BY子句:排序查询的输出 211
8.7 联合多个查询的结果 214
8.7.1 UNION 214
8.7.2 EXCEPT 218
8.8 小结 220
第9章 多表查询 221
9.1 内连接 221
9.1.1 用于内连接的两个语法 221
9.1.2 同等连接 223
9.1.3 非同等连接 225
9.1.4 自连接 227
9.1.5 交叉连接 229
9.1.6 连接两个以上的表 230
9.2 外连接:基于包含NULL值的列连接表 233
9.2.1 外连接的两个语法 233
9.2.2 左外连接 234
9.2.3 右外连接 237
9.2.4 全外连接 238
9.2.5 合并连接 239
9.3 涉及内联视图的连接 239
9.4 使用相关查询的多表连接 240
9.5 提高多表查询的效率 241
9.6 小结 242
第10章 SQL函数 243
10.1 数字函数 245
10.1.1 CEIL 246
10.1.2 ROUND 246
10.1.3 TRUNC 247
10.1.4 RAND 248
10.1.5 SIGN 249
10.2 字符串函数 249
10.2.1 CONCAT 250
10.2.2 CHARINDEX, INSTR, LOCATE以及POSSTR 251
10.2.3 SUBSTR和SUBSTRING 253
10.2.4 LENGTH 254
10.2.5 LOWER和UPPER 255
10.2.6 TO_CHAR, CHAR以及STR 255
10.2.7 REPLACE 256
10.2.8 REPLICATE和REPEAT 256
10.2.9 TRANSLATE 257
10.2.10 TRIM, LTRIM以及RTRIM 258
10.3 日期和时间函数 259
10.3.1 GETDATE, SYSDATE以及CURRENT DATE时区函数 260
10.3.2 ADD_MONTHS和DATEADD 262
10.3.3 EXTRACT和DATEPART 264
10.3.4 DAYNAME, MONTHNAME以及DATENAME 264
10.3.5 MONTHS_BETWEEN和DATEDIFF 265
10.4 聚合函数 266
10.4.1 SUM 267
10.4.2 COUNT 268
10.4.3 AVG 269
10.4.4 MIN和MAX 270
10.5 转换函数 271
10.5.1 不同数据类型之间的转换 272
10.5.2 在不同的字符集之间转换 278
10.5.3 Oracle 9i的CONVERT,TRANSLATE … USING和UNISTR 278
10.5.4 数据类型专有的转换函数 279
10.6 混杂函数 280
10.6.1 DECODE和CASE 281
10.6.2 COALESCE和NULLIF 283
10.6.3 NVL, NVL2以及ISNULL转换中易犯的错误 285
10.7 用户定义的函数 286
10.8 小结 286
第11章 SQL运算符 287
11.1 算术运算符 287
11.2 逻辑运算符 290
11.2.1 ALL 291
11.2.2 ANY | SOME 291
11.2.3 BETWEEN AND 291
11.2.4 IN 293
11.2.5 EXISTS 294
11.2.6 LIKE 295
11.2.7 AND 297
11.2.8 NOT 297
11.2.9 OR 298
11.3 运算符优先级 298
11.4 赋值运算符 300
11.5 比较运算符 301
11.6 位运算符 303
11.7 用户定义的运算符 305
11.8 小结 306
第5部分 利用系统目录来实现安全 307
第12章 SQL和RDBMS的安全 309
12.1 基本的安全机制 309
12.1.1 标识和身份验证 309
12.1.2 授权和访问控制 309
12.1.3 加密 310
12.1.4 完整性和一致性 310
12.1.5 审核 310
12.2 定义一个数据库用户 310
12.3 使用特权来管理安全 314
12.3.1 GRANT语句 314
12.3.2 REVOKE特权 326
12.4 使用角色管理安全 331
12.5 利用视图实现安全 336
12.6 利用约束实现安全 338
12.7 利用存储过程和触发器实现安全 339
12.8 数据加密 341
12.9 数据库审核 345
12.10 安全标准 348
12.10.1 国际安全标准 348
12.11 小结 350
第13章 系统目录和INFORMATION_SCHEMA 351
13.1 SQL系统目录 351
13.2 Oracle 9i数据字典 353
13.2.1 Oracle数据字典结构 353
13.2.2 Oracle数据字典和SQL99标准 355
13.2.3 更深一级:有关元数据的数据 356
13.3 IBM DB2 UDB 8.1系统目录 358
13.3.1 DB2中的INFORMATION_SCHEMA对象 358
13.3.2 获得有关INFORMATION_SCHEMA对象的信息 360
13.4 Microsoft SQL Server 2000系统目录 361
13.4.1 MS SQL Server 2000的INFORMATION_SCHEMA视图 361
13.4.2 Microsoft SQL Server系统存储过程 364
13.4.3 Microsoft SQL Server 2000系统函数 368
13.5 小结 370
第6部分 超越SQL:过程化程序设计和数据库访问机制 371
第14章 存储过程. 触发器以及用户定义的函数 373
14.1 过程化扩展的用途和好处 374
14.1.1 性能和网络通信量 374
14.1.2 数据库安全 375
14.1.3 代码的可重用性 375
14.2 SQL过程化语言的关键元素 375
14.2.1 变量和赋值 375
14.2.2 模块化. 子程序以及块结构 376
14.2.3 传递参数 377
14.2.4 有条件地执行 380
14.2.5 重复地执行 382
14.2.6 游标 383
14.2.7 错误处理 387
14.3 存储过程 389
14.3.1 CREATE PROCEDURE语法 389
14.3.2 创建一个简单的存储过程 390
14.3.3 删除一个存储过程 395
14.4 用户定义函数 396
14.4.1 CREATE FUNCTION语法 396
14.4.2 创建一个简单的函数 397
14.4.3 删除一个用户定义函数 399
14.5 触发器 400
14.5.1 CREATE TRIGGER语法 400
14.5.2 删除一个触发器 403
14.6 小结 403
第15章 动态和嵌入式SQL概述 405
15.1 SQL语句处理步骤 405
15.2 嵌入式(静态)SQL 406
15.2.1 嵌入式SQL和SQL99标准 406
15.2.2 嵌入式SQL基本原理 407
15.3 动态SQL技术 416
15.3.1 动态SQL的两个变种 416
15.3.2 动态SQL和SQL99标准 416
15.3.3 动态SQL的基本原理 417
15.4 嵌入式SQL的未来 425
15.5 小结 426
第16章 SQL API 427
16.1 SQL/CLI标准 427
16.2 Microsoft开放式数据库连接:ODBC 430
16.2.1 在Windows上配置一个ODBC数据源名称 431
16.3 Java数据库连接:JDBC 433
16.4 IBM DB2 UDB调用级接口:CLI 437
16.5 Oracle调用接口:OCI 439
16.6 用于OLE的Oracle对象 442
16.7 Microsoft数据访问接口 444
16.8 小结 451
第17章 新的发展:XML. OLAP以及对象 453
17.1 XML 453
17.1.1 Oracle 9i 454
17.1.2 IBM DB2 UDB 8.1 455
17.1.3 Microsoft SQL Server 2000 456
17.2 OLAP和商业智能 457
17.2.1 Oracle 9i 459
17.2.2 IBM DB2 UDB 8.1 459
17.2.3 Microsoft SQL Server 2000 459
17.3 对象 460
17.3.1 OOP 460
17.3.2 Oracle 9i的支持 462
17.3.3 IBM DB2 UDB 8.1的支持 462
17.3.4 Microsoft SQL Server 2000 463
17.3.5 抽象数据类型 464
17.3.6 面向对象的数据库 464
17.4 小结 466
附录A 光盘中的内容 467
附录B ACME样例数据库 471
附录C 关系型数据库设计基础 485
附录D 安装RDBMS软件 491
附录E 访问RDBMS 521
附录F 安装ACME数据库 531
附录G SQL函数 535
附录H SQL语法参考 553
附录I SQL保留的关键字 561
附录J 不同的RDBMS对SQL99主要功能的遵从性 571
附录K 其他的RDBMS 581
附录L 记数系统. 布尔代数以及集合论的简短介绍 585