第1章 在表中存储信息 1
介绍 1
1-1 什么是 SQL? 1
1-2 什么是关系数据库?为什么要使用它? 2
1-3 为什么学习 SQL? 4
1-4 本书的内容 5
表的组成部分 6
1-5 数据存储在表中 6
1-6 一个行表示一个对象及其相关信息 7
1-7 一个列表示一类信息 8
1-8 单元是表的最小部分 9
1-9 每个单元应该只表示一样东西 10
1-10 使用主键列识别每一个行 11
1-11 大部分表都很瘦长 12
表的例子 12
1-12 Oracle 和 Access 中表的例子 13
1-13 l_employees 表的一些设计决策 15
1-14 Lunches 数据库 16
小结 21
第2章 从表中获取信息 22
select 语句 22
2-1 目标:从表中获取几个列和行 22
2-2 select 语句概述 23
select 子句 25
2-3 select 子句概述 25
2-4 使用 select 子句获取若干列 26
2-5 使用 select 子句获取所有的列 29
2-6 使用 select 语句获取某个列中的相异值 31
2-7 使用 select 子句获得几个列中的相异值 34
where 子句 35
2-8 where 子句概述 36
2-9 在 where 子句中使用等于条件 37
2-10 在 where 子句中使用小于条件 39
2-11 在 where 子句中使用不等于条件 40
2-12 在 where 子句中使用 in 条件 42
2-13 在 where 子句中使用 between 条件 44
2-14 在 where 子句中使用 like 条件 47
2-15 在 where 子句中使用 is null 条件 49
order by 子句 51
2-16 order by 子句概述 51
2-17 通过若干列升序排列行 52
2-18 通过若干列按照不同顺序排列行 53
2-19 整个过程 55
小结 55
练习 56
where 子句中的复合条件 63
3-1 在 where 子句中使用复合条件 63
第3章 where 子句中的复合条件 63
3-2 将 not 与 in、between、like 和 is null 条件一起使用 65
3-3 where 子句中复杂条件的标准形式 67
3-4 如何将复杂条件放入标准形式 69
3-5 规则1和规则3的例子 70
3-6 规则2的例子 72
3-7 规则4的例子 73
3-8 一个常见错误 75
常数值 77
3-9 select 子句中使用常数值 78
3-10 使用常数表 80
标点符号 82
3-11 现在需要知道的标点符号 83
3-12 标点符号参考 84
3-13 区分大小写 90
3-14 练习1 91
例题 91
3-15 练习2 94
3-16 练习3 95
小结 97
练习 97
第4章 保存结果 101
在新表或者视图中保存结果 101
4-1 从 select 语句的结果中创建一个新表 101
4-2 从 select 语句的结果中创建一个新的视图 104
4-3 表和视图的相似之处 106
4-4 表和视图的不同之处 106
4-5 删除表 107
4-6 删除视图 108
4-7 一个视图可以建立在另一个视图之上 108
4-8 预防性删除 111
4-9 添加新行到表中 113
修改表中的数据 113
4-10 commit 和 rollback 115
4-11 添加若干新行到包含 select 语句的表中 116
4-12 更改已经存在于表的行中的数据 118
4-13 从表中删除行 120
4-14 包含 insert、update 和 delete 的约束条件 121
4-15 autocommit 122
4-16 使用 Access GUI 环境更改表中数据 123
小结 125
练习 125
第5章 通过视图修改数据 129
事务 129
5-1 事务的例子 129
通过视图修改数据 131
5-2 通过视图更改数据 132
5-3 通过视图更改数据的例子 133
5-4 使用 With Check Option 的视图 138
Oracle SQLplus 139
5-5 如何使用 SQLplus 设置列格式和标题 140
5-6 如何使用 SQLplus 查找表或者视图中的列名 144
5-7 如何使用假脱机文件 145
5-8 如何获得 SQLplus 的在线帮助 145
5-9 如何显示 SQLplus 的参数设置 146
5-10 关于 SQLFUN_LOGIN 脚本 147
5-11 如何使用 Oracle SQLplus 文档 148
查找关于表和视图的信息 150
5-12 数据字典概述 150
5-13 如何查找所有表的名字 152
5-14 如何查找所有视图的名字 154
5-15 如何查找定义视图的 select 语句 155
5-16 如何查找表或者视图中的列名 156
5-17 如何查找表的主键 158
小结 160
练习 160
第6章 创建自己的表 163
创建表 163
6-1 create table 命令 163
6-2 Oracle 和 Access 中的数据类型 164
6-3 时间的两种类型 168
6-4 将数据放入新的 l_foods 表中 168
6-5 在 Oracle 中创建 l_employees 表 169
更改表 171
6-6 向表添加主键 172
6-7 更改表的主键 173
6-8 向表添加一个新列 174
6-9 扩展列的长度 175
6-10 从表中删除一个列 176
6-11 对表进行其他更改 177
包含重复行的表 180
6-12 重复行的问题 180
6-13 如何删除重复行 182
6-14 如何区别重复行 183
从文件中加载大量数据 185
6-15 Oracle 中的 SQL * Loader 185
6-16 加载在 Oracle 中带分隔符的数据 190
6-17 Oracle 中的 analyze table 192
6-18 Access 中的 File Import 193
小结 196
练习 197
第7章 格式、序列和索引 201
格式 201
7-1 日期格式 201
7-2 显示已经格式化的日期 203
7-3 输入已格式化的日期 205
7-4 Oracle 中的其他格式 207
7-5 Access 中的格式 207
序列 209
7-6 在 Oracle 中创建序列 209
7-7 在 Oracle 中使用序列 210
7-8 Access 中的序列 212
索引 213
7-9 创建索引 214
7-10 优化器 215
7-11 索引如何工作的范例 215
在数据字典中查找更多的信息 216
7-12 如何查找有关列的数据类型的信息 216
7-13 如何查找有关序列的信息 219
7-14 如何查找有关索引的信息 220
7-15 如何在 Oracle 中查找有关所有数据库对象的信息 222
7-16 如何使用 Oracle 中的字典表 223
7-17 如何使用 Oracle 中的字典列的索引 224
练习 225
7-18 创建一个想要庆祝的节日的表 225
小结 227
练习 227
第8章 数据完整性 230
参照完整性 230
8-1 参照完整性的概念 230
8-2 参照完整性的例子 231
8-3 对 RI 保护的数据表使用 insert 和 update 233
8-4 通过 RI 允许对数据表使用 insert 和 update 233
8-5 对 RI 保护的查找表使用 update 和 delete 235
8-6 如何从查找表中删除编码 235
8-7 如何在查找表中更改编码 237
8-9 在 Access GUI 中建立 RI 238
8-8 表之间关系的 RI 238
RI 的 delete 选项和 update 选项 240
8-10 删除和更改查找表的三个选项 241
8-11 删除规则:setnull 241
8-12 删除规则:cascade 243
8-13 更新规则:cascade 246
参照完整性的变体 247
8-14 主键的两种含义 247
8-15 使用两个或者更多的列作为主键 249
8-16 查找表和数据表可以是同一个表 250
其他类型的约束条件 251
8-17 check 约束条件 251
8-18 unique 约束条件 252
8-19 not null 约束条件 253
8-20 primary key 约束条件 254
8-22 约束条件常通过 create table 语句实现 255
8-21 对字段数据类型和长度的限制 255
小结 257
练习 258
第9章 行函数 260
行函数介绍 260
9-1 直接从原表中获得数据 260
9-2 行函数的定义 261
9-3 select 子句中行函数的例子 263
9-4 select 语句的子句使用行函数的例子 264
9-5 在第一步中定义行函数 266
数字函数 268
9-6 数字函数 269
9-7 如何测试行函数 270
9-8 测试数字行函数的另一种方法 271
文本函数 273
9-9 文本函数 273
9-10 合并名和姓 275
9-11 分离名和姓 277
9-12 设计电话号码的格式 279
日期函数 280
9-13 日期函数 281
9-14 日期函数的一个例子 283
9-15 从日期中删除时间 284
小结 287
练习 287
第10章 使用行函数 291
其他函数 291
10-1 其他行函数 291
10-2 使用函数识别用户和日期 292
10-3 使用函数将 null 更改为其他值 293
10-4 使用函数更改数据类型 295
10-5 在 Access 中使用表达式生成器 298
使用行函数的文档 298
10-6 使用 Oracle 的文档 299
创建数字和日期模式 301
10-7 创建一个简单的数字模式 302
10-8 创建复杂的数字模式 303
10-9 解代数方程的一个简单方法 305
10-10 列出一个星期的所有星期数 308
10-11 创建一个工作日日历 311
10-12 如何计算从出生到现在的天数 315
10-13 如何查找出生后满10000天的日期 316
小结 317
练习 317
第11章 总结数据 319
列函数的介绍 319
11-1 总结一个列中的所有数据 319
11-2 列函数清单 320
最大值和最小值 321
11-3 找出最大值和最小值 321
11-4 使用包含列函数的 where 子句 323
11-5 找出有最大值和最小值的行 325
计数 327
11-6 对行和数据计数 327
11-7 零计数 329
11-8 对列中相异值计数 330
11-9 计算多个列中相异值的数目 332
求和及平均 334
11-10 求和函数和平均函数 334
11-11 加法存在的问题以及如何解决 335
其他主题 340
11-12 并不总将 null 更改为零 340
11-13 计算列中 null 的数目 341
11-14 对相异值计数 342
练习 345
小结 345
第12章 控制总结级别 346
将表划分为行的组并总结每个组 346
12-1 列中数据组的总结 346
12-2 group by 子句 347
12-3 由两个或更多列形成的组 349
12-4 有多个分组列时的 null 组 352
12-5 在同一个 select 语句中,已总结的数据不能与没有总结的数据混在一起 354
12-6 解决方案1:将更多的列添加到 group by 子句中 357
12-7 解决方案2:将查询分为两个单独的 select 语句 358
12-8 如何创建有多个小计和一个总计的报告 360
12-9 第2部分,零计数 360
12-10 第3部分,零计数 362
12-11 having 子句 364
消除某些已总结的数据 364
12-12 比较 having 子句与 where 子句 366
12-13 在一个表中使用 select 语句的全过程 366
12-14 having 子句没有增加 select 语句功能 366
12-15 使用 where 子句而不是 having 子句来删除原始数据 369
总结的约束条件 370
12-16 已分组总结的3个约束条件 370
12-17 如何应用约束条件1 371
12-18 如何应用约束条件2 373
12-19 如何应用约束条件3 375
小结 377
练习 378
第13章 内连接 382
连接简介 382
13-1 查询可以获取几个表中的数据 382
13-2 最佳方法是一次连接两个表 383
两个表的内连接 384
13-3 一对一关系 385
13-4 多对一关系 387
13-5 一对多关系 388
13-6 多对多关系 389
13-7 删除不匹配的行 390
13-8 删除匹配列中带有 null 的行 391
13-9 编写 SQL 语句进行内连接的5种方式 393
连接条件的变体 395
13-10 用两个或多个匹配列连接 395
13-11 用 between 匹配一系列值连接 396
13-12 使用大于条件连接 397
13-13 用行函数进行连接 399
13-14 在 from 子句中编写连接条件 400
13-15 查找表 402
连接应用 402
13-16 组合连接和数据的选取 404
13-17 联合使用连接 406
13-18 如何从数据词典中找出主键列 407
13-19 用内连接组合三个或更多的表 409
小结 410
练习 411
第14章 外连接 412
外连接简介 412
14-1 外连接派生于内连接 412
14-2 外连接的3种类型 413
14-3 左外连接 415
14-4 右外连接 417
14-5 全外连接 418
14-6 union 简介 420
14-7 带有匹配列的两个表的 union 的例子 422
14-8 零计数 424
外连接应用 424
14-9 组合外连接与数据选取 426
14-10 按排序顺序全外连接 429
14-11 找出模式中的缺陷 431
14-12 用两列或多列进行比较 434
14-13 比较两个不同的全外连接 436
小结 439
练习 439
第15章 Union 和 Union all 442
Union 442
15-1 Union 与连接之间的区别 442
15-2 Union all 444
15-3 Union 中的 select 语句 445
15-4 Union 中的 order by 子句 447
15-5 创建一个包含 Union 的表或者视图 449
15-6 Union 中的自动数据类型转换 451
非常规的 Union 454
15-7 不同数据类型表的 Union 454
15-8 有不同列数的两个表的 Union 455
Union 的应用 457
15-9 确定两个表是否相同 457
15-10 在 Union 中使用文字确定数据的来源 459
15-11 标记异常情况、警告和错误的附加消息 461
15-12 将数据从一个列中分到两个不同的列中 462
15-13 将两个函数应用到数据的不同部分 464
15-14 三个或更多表的 Union 465
在 Oracle 中设置交集和差集 467
15-15 设置交集 467
15-16 差集 468
小结 471
练习 471
16-1 交叉连接的定义 473
第16章 交叉连接和自连接 473
交叉连接 473
16-2 交叉连接重要的原因 475
16-3 内连接源自交叉连接 475
16-4 内连接的属性 477
16-5 连接条件中的错误可以显示为一个交叉连接 478
16-6 使用交叉连接列出所有可能组合 480
16-7 避免对大型表使用交叉连接 482
自连接 483
16-8 表为什么与自己连接 483
16-9 自连接的例子 485
16-10 生成从0~999的数字 488
16-11 对 Oracle 和 Access 报告的行编号 490
小结 492
练习 492
17-1 使用一系列步骤连接几个表 494
连接三个或者更多表的方法 494
第17章 在生产数据库中合并表 494
17-2 在 where 子句中连接几个表 497
17-3 在 from 子句中连接几个表 497
丢失的信息 499
17-4 小心使用内连接 499
17-5 小心使用左外连接和右外连接 499
17-6 完全外连接保留了所有的信息 500
17-7 几个表的完全外连接 500
注意计算机的效率 502
17-8 监视查询 503
17-9 使用索引 503
17-10 尽早在过程中选择想要的数据 503
17-11 使用表保存总结数据 503
17-14 视图可以标准化表的连接方式 504
17-13 连接是数据库设计的一部分 504
标准化连接表的方式 504
17-12 使用几种方法编写 SQL 504
17-15 临时报告 509
小结 509
第18章 IF-THEN-ELSE 和子查询 510
If-Then-Else 逻辑 510
18-1 Oracle 中的 decode 函数 510
18-2 Access 中的 Immediate If(iif)函数 513
18-3 附加消息给行 515
18-4 将一个列的数据分解为两个不同的列 517
18-5 对数据的不同部分应用两个函数 519
参数查询 520
18-6 Oracle 中的参数查询 521
18-7 Oracle 中多次使用参数 522
18-8 Oracle 中更多定义参数的方法 523
18-10 Access 中带有两个参数的查询 526
18-9 Access 中的参数查询 526
18-11 Access 中的参数限制 527
子查询 527
18-12 子查询简介 527
18-13 产生一系列值的子查询 529
18-14 产生一个值的子查询 531
18-15 存在 null 值时避免使用 not in 533
子查询的应用 535
18-16 用于 update 命令中的子查询 535
18-17 找出两个表之间的不同之处 537
18-18 使用最新数据 539
子查询的原有特性 539
18-19 相关子查询 539
18-20 使用 exists 的子查询 541
18-21 使用子查询编写外连接 541
小结 543
18-24 许多子查询也可以写作连接 543
18-22 嵌套子查询 543
18-23 子查询的使用限制 543
第19章 多用户环境 544
数据库配置 544
19-1 单用户环境 544
19-2 多用户环境 545
19-3 分布式环境 546
19-4 通过 Internet 连接 547
在多用户环境中运行 547
19-5 如何使用别人拥有的表 547
19-6 代名 549
19-7 快照 550
安全性和特权 552
19-8 识别用户 552
19-9 特权 552
19-10 角色 553
几个人同时使用相同的表 554
19-11 一个人更改数据而另一个人查看 555
19-12 两个人更改同一个表中的不同行 559
19-13 两个人改变表中同一行 562
锁定 564
19-14 行锁定 564
19-15 Rollback 段 565
19-16 表锁定 565
19-17 锁定类型 565
19-18 Select for update 命令 565
19-19 运行 select 语句时的稳定性 568
19-20 运行某个事务期间的稳定性 569
结论 572
19-22 如何在数据字典中找到所需的表 573
19-21 ALL 和 USER 573
数据字典和多用户环境 573
19-23 如何找到列的含义 574
如何创建一个共享的应用程序 574
19-24 将 Lunches 数据库创建为共享应用程序 574
小结 578
第20章 SQL 设计 579
SQL 的最初设计目标 579
20-1 做一件事并且做好它 579
20-2 重点是信息 579
20-3 保持 SQL 语言的简单性 580
20-4 协调人们一起工作 581
新的界面 581
20-5 窗体 581
20-8 更小的数据库 582
典型应用 582
20-6 报告 582
20-7 Web 工具 582
20-9 OLTP 586
20-10 数据仓库 586
小结 586
附录 A 获取和安装 Oracle 587
获取当前信息 587
用户应该获取哪种产品 587
下载向导 588
订购 Oracle 光盘 588
从 Internet 下载 Oracle 588
注册向导 588
安装 Oracle 589
检测系统需求 589
安装过程 589
验证 Oracle 是否正确运行 590
使用用户 id System 登录到 SQLplus 中 590
安装运行本书中的例子 590
在 C 盘创建一个 temp 目录 590
初始用户 id 和口令 590
验证表空间的名称 591
建立新的用户 id 591
登录新用户 id 592
安装本书中用到的表 592
检查表是否正确加载 593
灾难恢复 594
如何创建表并指定其他的表空间名称 594
附录 B 使用 Oracle 的技巧 595
启动 Oracle 595
输入查询 596
使用 SQLplus 行编辑器 599
使用剪切并粘贴的方法 599
出发点 599
另一种编辑 SQL 代码的方法 599
错误消息有时候是正确的 600
使用滚动条 600
如果 Oracle 不响应 601
安装 LOGIN 脚本 601
运行一个章所有的 SQL 601
附录 C 使用 Access 的技巧 603
可以使用 Access 2000或2002 603
启动 Access 603
输入 SQL 查询 604
处理错误 607
打印 608
附录 D Lunches 数据库图表 609
连接条件 609
数据验证规则 610