第一篇 概要 1
1.2.1 Codd的关于数据库模型的十二条准则 2
1.2 数据库历史简介 2
第1章 SQL语言介绍 2
1.1 SQL语言历史简介 2
1.3.1 当今的数据库概述 5
1.3 数据库结构设计 5
1.4.2 SQL和客户/服务器应用的开发 6
1.4.1 早期的实现 6
1.4 跨产品语言 6
1.6.1 MicrosoftAccess 7
1.6 几种较流行的SQL语言的实现 7
1.5 SQL语言概述 7
1.6.3 MicrosoftQuery 8
1.6.2 PersonalOracle7 8
1.8 应用程序编程中的SQL语言 9
1.7 开放数据库连接(ODBC) 9
1.10 问与答 10
1.9 小结 10
1.11.2 练习 11
1.11.1 测验 11
1.11 工作室 11
2.3 一般的句法格式 12
2.2 背景 12
第2章 查询简介:SELECT语句 12
2.1 目标 12
2.4 用SELECT及FROM建立数据检索块 13
2.5 示例 14
2.6.2 改变列的顺序 15
2.6.1 结束一个SQL语句 15
2.6 第一个查询 15
2.6.3 选择特定的列 16
2.7 使用区别(Distinction)查询 17
2.6.4 从不同表中选择数据 17
2.10.1 测验 19
2.10 工作室 19
2.8 小结 19
2.9 问与答 19
2.10.2 练习 20
3.2 表达式 21
3.1 目标 21
第3章 表达式、条件和操作符 21
3.3.1 WHERE子句 22
3.3 条件 22
3.4.1 算术操作符 23
3.4 操作符 23
3.4.2 比较操作符 30
3.4.3 字符操作符 36
3.4.4 逻辑操作符 40
3.4.5 集合操作符 44
3.4.6 其它操作符:IN和BETWEEN 46
3.6 问与答 48
3.5 小结 48
3.7.2 练习 49
3.7.1 测验 49
3.7 工作室 49
4.2.1 COUNT 51
4.2 聚集函数 51
第4章 函数:构造检索数据的模式 51
4.1 目标 51
4.2.2 SUM 52
4.2.3 AVG 54
4.2.5 MIN 55
4.2.4 MAX 55
4.2.6 VARIANCE 56
4.2.7 STDDEV 57
4.3.1 ADD_MONTHS 58
4.3 日期和时间函数 58
4.3.2 LAST_DAY 59
4.3.3 MONTHS_BETWEEN 60
4.3.5 NEXT_DAY 62
4.3.4 NEWTIME 62
4.4 算术函数 63
4.3.6 SYSDATE 63
4.4.2 CEIL和FLOOR 64
4.4.1 ABS 64
4.4.3 COS、COSH、SIN、SINH、TAN和TANH 65
4.4.4 EXP 67
4.4.5 LN和LOG 68
4.4.7 POWER 69
4.4.6 MOD 69
4.4.9 SQRT 70
4.4.8 SIGN 70
4.5.1 CHR 71
4.5 字符函数 71
4.5.2 CONCAT 72
4.5.4 LOWER和UPPER 73
4.5.3 INITCAP 73
4.5.5 LPAD和RPAD 74
4.5.6 LTRIM和RTRIM 75
4.5.7 REPLACE 76
4.5.8 SUBSTR 78
4.5.9 TRANSLATE 80
4.5.11 LENGTH 81
4.5.10 INSTR 81
4.6.1 TOCHAR 82
4.6 转换函数 82
4.7.1 GREATEST和LEAST 83
4.7 其它函数 83
4.6.2 TO_NUMBER 83
4.9 问与答 84
4.8 小结 84
4.7.2 USER 84
4.10.2 练习 85
4.10.1 测验 85
4.10 工作室 85
5.1 目标 86
第5章 SQL子句 86
5.2 WHERE子句 87
5.3 STARTINGWITH子句 89
5.4 ORDERBY子句——把混乱变为有序 90
5.5 GROUPBY子句 95
5.6 HAVING子句 100
5.7 复合子句 104
5.10.2 练习 110
5.10.1 测验 110
5.8 小结 110
5.9 问与答 110
5.10 工作室 110
6.3 在单个SELECT语句中的多重表 111
6.2 介绍 111
第6章 连接表 111
6.1 目标 111
6.4 相等连接 116
6.3.1 寻找正确的列 116
6.5 不等连接 121
6.6 比较外部连接和内部连接 122
6.7 将表与自己连接 125
6.8 小结 126
6.10.1 测验 127
6.10 工作室 127
6.9 问与答 127
6.10.2 练习 128
7.2 建立一个子查询 129
7.1 目标 129
第7章 子查询:嵌入式SELECT语句 129
7.3 在子查询中使用聚集函数 134
7.4 嵌套子查询 135
7.5 相关子查询 139
7.6 使用EXISTS、ANY和ALL 142
7.9.1 测验 147
7.9 工作室 147
7.7 小结 147
7.8 问与答 147
7.9.2 练习 149
预习 150
第一篇 回顾 150
本篇综述 151
第二篇 概要 151
8.2 数据操作语句简介 152
8.1 目标 152
第8章 操作数据 152
8.3.1 INSERT...VALUES语句 153
8.3 INSERT语句 153
8.3.2 插入NULL值(空值) 155
8.3.4 INSERT...SELECT语句 156
8.3.3 插入唯一值 156
8.4 UPDATE语句 159
8.5 DELETE语句 161
8.6.1 MicrosoftAccess 165
8.6 从外部数据源输入和输出数据 165
8.6.3 PersonalOracle7 166
8.6.2 Microsoft和Sybase的SQLServer 166
8.8 问与答 167
8.7 小结 167
8.9.1 测验 168
8.9 工作室 168
8.9.2 练习 169
9.2 CREATEDATABASE语句 170
9.1 目标 170
第9章 创建和维护表 170
9.2.2 数据库设计 171
9.2.1 CREATEDATABASE选项 171
9.2.4 创建关键字段 172
9.2.3 创建数据字典 172
9.3.2 字段名 174
9.3.1 表名 174
9.3 CREATETABLE语句 174
9.3.3 字段的数据类型 175
9.3.5 从一个存在的表创建表 178
9.3.4 表的存储和尺寸 178
9.4 ALTERTABLE语句 179
9.5 DROPTABLE语句 180
9.6 DROPDATABASE语句 181
9.8 问与答 182
9.7 小结 182
9.9.2 练习 183
9.9.1 测验 183
9.9 工作室 183
10.1 目标 184
第10章 创建视图和索引 184
10.2 使用视图 185
10.2.1 简单视图 187
10.2.2 改列名 188
10.2.3 SQL视图处理 189
10.2.4 使用SELECT语句的限制 193
10.2.5 与使用视图修改数据有关的问题 195
10.2.8 用视图转换单位 196
10.2.7 视图和安全性 196
10.2.6 视图的一般应用 196
10.2.9 用视图简化复杂的查询 197
10.2.10 DROPVIEW语句 198
10.3.1 索引是什么 199
10.3 使用索引 199
10.3.3 在一个以上的字段建立索引 203
10.3.2 索引技巧 203
10.3.4 使用带有UNIQUE关键字的CREATEINDEX语句 205
10.3.5 索引与连接 207
10.4 小结 208
10.3.6 使用聚簇(Cluster) 208
10.6 工作室 209
10.5 问与答 209
10.6.2 练习 210
10.6.1 测验 210
11.2 事务控制 211
11.1 目标 211
第11章 事务控制 211
11.3 银行应用 212
11.4 开始一个事务 213
11.5 结束一个事务 215
11.6 撤消事务 217
11.7 使用事务保存点(SAVEPOINT) 219
11.9 问与答 222
11.8 小结 222
11.10.2 练习 223
11.10.1 测验 223
11.10 工作室 223
12.2 流行的数据库产品及其安全性 224
12.1 数据库管理员须知 224
第12章 数据库安全性 224
12.4 PersonalOracle7和安全性 225
12.3 如何确保数据库的安全性 225
12.4.1 创建用户 226
12.4.2 创建角色(Roles) 227
12.4.3 用户特权 228
12.4.4 用户访问视图 229
12.4.5 用视图实现安全性 234
12.4.6 使用同义词代替视图 235
12.4.7 使用WITHGRANTOPTION子句 237
12.7 工作室 238
12.6 问与答 238
12.5 小结 238
12.7.2 练习 239
12.7.1 测验 239
13.2 临时表 240
13.1 目标 240
第13章 高级SQL主题 240
13.3.1 创建游标 245
13.3 游标 245
13.3.3 滚动游标 246
13.3.2 打开游标 246
13.3.5 关闭游标 247
13.3.4 测试游标的状态 247
13.3.6 游标的使用范围 248
13.4 创建并使用存储过程 249
13.4.1 使用存储过程参数 251
13.4.2 删除存储过程 252
13.4.3 嵌套存储过程 253
13.5 设计和使用触发器 254
13.5.1 触发器和事务 255
13.5.2 使用触发器的限制 256
13.5.3 嵌套触发器 256
13.6.1 在执行之前测试SELECT语句 257
13.6 在UPDATE和DELETE语句中使用SELECT命令 257
13.7.1 静态和动态SQL语言 258
13.7 嵌入式SQL语言 258
13.10 问与答 260
13.9 小结 260
13.8 使用SQL编程 260
13.11.2 练习 261
1311.1 测验 261
13.11 工作室 261
14.2.2 PersonalOracle7 262
14.2.1 ODBC 262
第14章 SQL语言的动态使用 262
14.1 目标 262
14.2 快速浏览 262
14.2.5 Delphi 263
14.2.4 VisualC++++ 263
14.2.3 INTERBASESQL(ISQL) 263
14.4 创建数据库 264
14.3 开始 264
14.5 用MicrosoftQuery执行连接 268
14.6 使用VisualC++++和SQL 270
14.7 使用Delphi和SQL 275
14.8 小结 280
14.10.2 练习 281
14.10.1 测验 281
14.9 问与答 281
14.10 工作室 281
第二篇 回顾 282
运用SQL知识 283
第三篇 概要 283
15.2 增加SQL语句的可读性 284
15.1 目标 284
第15章 改进性能的优化执行SQL语句 284
15.3 扫描整个表 285
15.5 查询中各成分的安排 286
15.4 增加一个新索引 286
15.5.2 避免使用OR 288
15.5.1 过程 288
15.6.1 OLTP调整 289
15.6 联机分析处理(OLAP)与联机事务处理(OLTP) 289
15.7 成批装入与事务处理 290
15.6.2 OLAP调整 290
15.8 通过删除索引优化数据装载 291
15.10 在动态环境中重建表和索引 292
15.9 经常提交数据——保证系统正常运行的关键 292
15.11 调整数据库 294
15.12 影响数据库性能的因素 296
15.14 小结 297
15.13 内置调整工具 297
15.16.2 练习 298
15.16.1 测验 298
15.15 问与答 298
15.16 工作室 298
16.2 数据字典介绍 300
16.1 目标 300
第16章 使用视图从数据字典中检索有用信息 300
16.4.1 Oracle的数据字典 301
16.4 数据字典的内容 301
16.3 数据字典的用户 301
16.5.1 用户视图 302
16.5 Oracle数据字典的剖析 302
16.4.2 Sybase的数据字典 302
16.5.2 系统DBA视图 308
16.5.3 动态性能视图 318
16.6 小结 320
16.5.4 PLAN表 320
16.8.2 练习 321
16.8.1 测验 321
16.7 问与答 321
16.8 工作室 321
17.2 使用SQL语言生成SQL语句的目的 322
17.1 目标 322
第17章 使用SQL语言生成SQL语句 322
17.3.2 setfeedbackon/off 323
17.3.1 selechoon/off 323
17.3 几个SQL*Plus命令 323
17.4 统计所有表中的行数 324
17.3.4 spoo1filename/off 324
17.3.3 setheadingon/off 324
17.5 为多个用户授予系统权限 328
17.6 将表的权限授予其他用户 330
17.7 为装入数据而禁止对表的约束 331
17.8 在单个区域内创建大量的同义词 332
17.9 在表上创建视图 335
17.10 截断某一用户的所有表 336
17.11 使用SQL语句生成Shell脚本 338
17.14 问与答 339
17.13 小结 339
17.12 对表和索引进行逆向工程 339
17.15.2 练习 340
17.15.1 测验 340
17.15 工作室 340
18.3 Pl/SQL中的数据类型 342
18.2 介绍 342
第18章 Pl/SQL语言简介 342
18.1 目标 342
18.3.4 日期数据类型 343
18.3.3 二进制数据类型 343
18.3.1 字符串数据类型 343
18.3.2 数值数据类型 343
18.4.1 注解 344
18.4 Pl/SQL程序块结构 344
18.3.5 布尔型 344
18.3.6 行号(ROWID) 344
18.5.2 常量赋值 345
18.5.1 变量赋值 345
18.5 DECLARE部分 345
18.5.5 %ROWTYPE属性 346
18.5.4 %TYPE属性 346
18.5.3 游标的定义 346
18.6.2 游标控制命令 347
18.6.1 BEGIN...END语句 347
18.5.6 %ROWCOUNT属性 347
18.6 PROCEDURE部分 347
18.6.3 条件语句 349
18.7.2 异常事件处理程序的执行 352
18.7.1 异常事件的触发 352
18.7 EXCEPTION部分 352
18.7.4 为用户显示输出结果 353
18.7.3 PL/SQL程序块的执行 353
18.8 PL/SQL中的事务控制 354
18.9.1 样表和数据 355
18.9 PL/SQL程序的完整介绍 355
18.9.2 PL/SQL程序块实例 356
18.9.3 另一个实例 359
18.10.2 程序包样本 363
18.10.1 存储过程样本 363
18.10 存储过程、程序包和触发器 363
18.10.3 触发器样本 364
18.13.1 测验 366
18.13 工作室 366
18.11 小结 366
18.12 问与答 366
18.13.2 练习 367
19.3.1 Transact-SQL面向哪些用户 368
19.3 对ANSISQL语言的扩充 368
第19章 Transact-SQL介绍 368
19.1 目标 368
19.2 Transact-SQL概述 368
19.4.2 数值数据类型 369
19.4.1 字符串类型 369
19.3.2 Transact-SQL的基本构成 369
19.4 数据类型 369
19.5.1 BASEBALL数据库 370
19.5 使用Transact-SQL访问数据库 370
19.4.3 日期数据类型 370
19.4.4 货币数据类型 370
19.4.5 二进制串 370
19.4.6 位(bit)——一种逻辑数据类型 370
19.5.2 局部变量的声明 372
19.5.3 全局变量的声明 373
19.5.4 变量的使用 374
19.5.5 PRINT命令 375
19.6.2 IF...ELSE语句 376
19.6.1 BEGIN和END语句 376
19.6 程序流程控制 376
19.6.4 测试一个查询结果 378
19.6.3 EXISTS条件 378
19.6.6 BREAK命令 379
19.6.5 WHILE循环 379
19.6.7 CONTINUE命令 380
19.6.8 使用WHILE循环滚动访问一个表 381
19.9 日期转换 382
19.8 使用COMPUTE命令创建合计报表 382
19.7 Transact-SQL通配符 382
19.10 SQLServer的诊断工具——SET命令 383
19.13.1 测验 384
19.13 工作室 384
19.11 小结 384
19.12 问与答 384
19.13.2 练习 385
20.3 SQL*Plus缓冲区 386
20.2 介绍 386
第20章 SQL*Plus 386
20.1 目标 386
20.4 DESCRIBE命令 390
20.5 SHOW命令 391
20.6.1 SAVE、GET和EDIT命令 393
20.6 文件命令 393
20.6.2 执行一个SQL文件 394
20.6.3 存储查询结果 396
20.7 SET命令 397
20.8 LOGIN.SQL文件 400
20.10.1 TTITLE和BTITLE命令 401
20.10 格式化输出结果 401
20.9 CLEAR命令 401
20.10.2 格式化的列(列、标题、格式) 402
20.11.1 BREAKON 404
20.11 报表和分组合计 404
20.11.2 COMPUTE 405
20.12.1 替代变量(&) 407
20.12 在SQL*Plus中使用变量 407
20.12.2 DEFINE 408
20.12.3 ACCEPT 409
20.12.4 NEWVALUE 411
20.13 DUAL表 412
20.14 DECODE函数 413
20.15 日期转换 416
20.16 执行一系列SQL文件 418
20.17 在SQL脚本文件中增加注释 419
20.18 高级报表 420
20.20 问与答 421
20.19 小结 421
20.21.2 练习 422
20.21.1 测验 422
20.21 工作室 422
21.3.1 表或视图不存在 423
21.3 常见错误 423
第21章 SQL语言常见错误及解决方法 423
21.1 目标 423
21.2 介绍 423
21.3.2 无效的用户名或口令 424
21.3.4 不允许使用分组函数 425
21.3.3 没有FROM关键字 425
21.3.6 缺少关键字 426
21.3.5 无效的列名 426
21.3.8 缺少右括号 427
21.3.7 缺少左括号 427
21.3.9 缺少逗号 428
21.3.11 SQL命令没有正常结束 429
21.3.10 列名定义不明确 429
21.3.13 函数缺少参数 430
21.3.12 缺少表达式 430
21.3.15 完整性约束冲突——双亲主键没有找到 431
21.3.14 缺少数据值 431
21.3.17 向列中插入的数据太大 432
21.3.16 Oracle不能使用 432
21.3.20 语句中的无效字符——Escape字符 433
21.3.19 没有授权的权限 433
21.3.18 远程数据库服务器不能识别连接描述符中的系统ID号 433
21.4.1 在SQL语句中使用保留字 434
21.4 常见的逻辑错误 434
21.3.21 不能创建操作系统文件 434
21.4.3 删除不合适的表 435
21.4.2 在多个选择列上使用DISTINCT命令 435
21.4.5 可怕的组合爆炸 436
21.4.4 在多模式的数据库中公共同义词的使用 436
21.4.9 将数据库对象存储到系统表空间中 437
21.4.8 对于很大的表采用缺省的存储参数 437
21.4.6 数据输入质量不高 437
21.4.7 采用不合适的文件系统结构 437
21.5.1 在数据库中查找重复的记录 438
21.5 防止数据出现麻烦 438
21.4.10 大量的备份文件没有压缩 438
21.4.11 没有规划好系统资源的使用 438
21.8.2 练习 439
21.8.1 测验 439
21.6 小结 439
21.7 问与答 439
21.8 工作室 439
第三篇 回顾 441
附录A 常用SQL语句中的词汇 442
附录B 第14章中使用的C++++程序源代码清单 445
附录C 第14章中使用的Delphi程序源代码清单 460
附录D 参考文献 462
附录E ASCII字符表 464
附录F 测验和练习答案 468