本章概要 1
第一篇 1
第1章 开始学习SQL语言 2
1.1 SQL语言历史简介 2
1.2数据库历史简介 2
1.2.1 Codd博士关于数据库模型的12条准则 3
1.3数据库结构设计 6
1.3.1当今的数据库概述 6
1.4.2 SQL和客户/服务器应用的开发 7
1.5 SQL语言概述 7
1.4跨产品语言 7
1.4.1早期的实现 7
1.6几种较流行的SQL语言的实现 8
1.6.1 Microsoft Access 8
1.6.2 Personal Orade 8 8
1.6.3 Microsoft Query 9
1.7开放数据库连接(ODBC) 10
1.8应用程序编程中的SQL语言 11
1.9小结 12
1.10问与答 12
1.11工作室 12
1.11.1测验 13
1.11.2练习 13
第2章 查询简介 14
2.1 SQL语言的背景 14
2.2一般的句法格式 14
2.3用SELECT及FROM建立数据检索块 15
2.4示例 16
2.5第一个查询 17
2.5.1结束一个SQL语句 17
2.5.2改变列的顺序 17
2.5.3选择特定的列 18
2.5.4从不同表中选择数据 19
2.6使用区别(Distinction)查询 19
2.9工作室 21
2.9.1测验 21
2.8问与答 21
2.7小结 21
2.9.2练习 22
第3章 表达式、条件和操作符 23
3.1表达式 23
3.2条件 24
3.2.1 WHERE子句 24
3.3操作符 25
3.3.1算术操作符 25
3.3.2比较操作符 32
3.3.3字符操作符 38
3.3.4逻辑操作符 42
3.3.5集合操作符 45
3.3.6其他操作符:IN和EBTWEEN 48
3.4小结 50
3.5问与答 50
3.6工作室 50
3.6.1测验 51
3.6.2练习 51
4.1.1 COUNT函数 52
第4章 利用内置函数生成数据 52
4.1聚集函数 52
4.1.2 SUM函数 53
4.1.3 AVG函数 55
4.1.4 MAX函数 55
4.1.5 MIN函数 56
4.1.6 VARIANCE函数 57
4.1.7 STDDEV函数 57
4.2日期和时间函数 58
4.2.1 ADD_MONTHS函数 59
4.2.2 LABT_DAY函数 60
4.2.3 MONTHS_BETWEEN函数 61
4.2.4 NEW_TIME函数 62
4.2.5 NEXT_DAY函数 63
4.2.6 SYSDATE函数 63
4.3算术函数 64
4.3.1 ABS函数 65
4.3.2 CELL和FLOOR函数 65
4.3.3 COS、COSH、SIN、SINH、TAN和TANH函数 66
4.3.5 LN和LOG函数 68
4.3.4 EXP函数 68
4.3.6 MOD函数 69
4.3.7 POWER函数 69
4.3.8 SIGN函数 70
4.3.9 SQRT函数 71
4.4字符函数 71
4.4.1 CHR函数 72
4.4.2 CONCAT函数 72
4.4.4 LOWER和UPPER函数 73
4.4.3 INITCAP函数 73
4.4.5 LPAD和RPAD函数 74
4.4.6 LTRIM和RTRIM函数 75
4.4.7 REPLACE函数 76
4.4.8 SUBSTR函数 78
4.4.9 TRANSLATE函数 80
4.4.10 INSTR函数 80
4.4.11 LENGTH函数 81
4.5转换函数 81
4.5.2 TO_NUMBER函数 82
4.5.1 TO_CHAR函数 82
4.6其他函数 83
4.6.1 GREATEST和LEAST函数 83
4.6.2 USER函数 83
4.7小结 84
4.8问与答 84
4.9工作室 84
4.9.1测验 84
4.9.2练习 85
第5章 SQL查询中的子句 86
5.1用WHERE子句指定查询条件 87
5.2 STARTING WITH子句 89
5.3 ORDER BY子句——把混乱变为有序 90
5.4 GROUP BY子句 95
5.5 HAVING子句 100
5.6复合子句 104
5.6.1大结局 107
5.7小结 109
5.9.2练习 110
5.9.1测验 110
5.9工作室 110
5.8问与答 110
第6章 连接表 111
6.1在单个SELECT语句中的多重表 111
6.1.1交叉连接表 112
6.1.2寻找正确的列 116
6.2相等连接 116
6.3不等连接 121
6.4外部连接和内部连接 122
6.5将表与自己连接:自连接 125
6.6小结 127
6.7问与答 128
6.8工作室 128
6.8.1测验 128
6.8.2练习 129
第7章 子查询:嵌入式SELECT语句 130
7.1建立一个子查询 130
7.2在子查询中使用聚集函数 134
7.3嵌套子查询 136
7.4参照外部表的相关子查询 139
7.5使用EXISTS、ANY和ALL 142
7.6小结 147
7.7问与答 147
7.8工作室 148
7.8.1测验 148
7.8.2练习 148
第一篇回顾 150
本篇概要 151
第二篇 151
第8章 数据库规范化 152
8.1规范化数据库 152
8.1.1原始数据库 152
8.1.2数据库逻辑设计 152
8.2范式 153
8.2.1第一范式 154
8.2.2第二范式 154
8.2.3第三范式 155
8.3.1参照完整性 156
8.3数据库规范化操作 156
8.3.2数据库规范化的优点 157
8.3.3数据库规范化的缺点 157
8.3.4将数据库非规范化 158
8.4小结 158
8.5问与答 158
8.6.1测验 159
8.6.2练习 159
8.6工作室 159
第9章 创建和维护表 161
9.1 CREATE DATABASE语句 161
9.1.1 CREATE DATABASE选项 162
9.1.2数据库设计 162
9.1.3创建数据字典 163
9.1.4创建关键字段 163
9.2 CREATE TABLE语句 165
9.2.1表名 165
9.2.3字段的数据类型 166
9.2.2字段名 166
9.2.4表的存储和尺寸 169
9.2.5由一个现存的表创建表 170
9.3 ALTER TABLE语句 171
9.4 OROP TABLE语句 172
9.5 DROP DATABASE语句 173
9.6小结 173
9.7问与答 174
9.8.2练习 175
9.8.1测验 175
9.8工作室 175
第10章 数据完整性控制 176
10.1约束简介 176
10.1.1数据完整性 176
10.1.2为什么使用约束 176
10.2约束的种类 177
10.2.1非空约束(NOT NULL) 177
10.2.2主键约束 178
10.2.3唯一约束 179
10.2.4外键约束 180
10.2.5检验约束 181
10.3约束管理 182
10.3.1约束的正确次序 182
10.3.2创建约束的正确方法 183
10.3.3 Oracle参照完整性报告实例 183
10.4小结 186
10.6.2练习 187
10.6.1测验 187
10.6工作室 187
10.5问与答 187
第11章 操作数据 189
11.1数据操作语句简介 189
11.2用INSERT语句输入数据 189
11.2.1用INSERT…VALUSE语句输入一条记录 190
11.2.2插入NULL值(空值) 191
11.2.3插入唯一值 192
11.2.4用INSERT…SELECT语句输入多条记录 193
11.3用UPDATE语句更新现有数据 196
11.4用DELETE语句删除信息 198
11.5从外部数据源输入和输出数据 202
11.5.1 Microsoft Access 202
11.5.2 Microsoft SQL Server 203
11.5.3 Personal Oracle8 204
11.6小结 204
11.7问与答 204
11.8工作室 205
11.8.1测验 205
11.8.2练习 206
第12章 事务控制 207
12.1事务控制 207
12.1.1银行应用 207
12.2开始一个事务 209
12.3结束一个事务 211
12.4撤销事务 212
12.5使用事务保存点(SAVEPOINT) 215
12.6小结 217
12.8.1测验 218
12.8.2练习 218
12.8工作室 218
12.7问与答 218
第13章 SQL语言中的日期与时间 220
13.1如何存储日期与时间型数据 220
13.1.1 ANSI标准的日期与时间型数据 220
13.1.2 DATETIME元素 221
13.1.3特定数据类型的实现 221
13.2日期函数 222
13.2.1当前日期 222
13.2.2时区 223
13.2.3在日期上增加时间 224
13.2.4日期相减 225
13.2.5比较日期和时间段 226
13.2.6其他的日期函数 227
13.3日期转换 227
13.3.1日期描述 228
13.3.2转换日期为字符串 230
13.3.3转换字符串为日期 230
13.4小结 231
13.6.2练习 232
13.6.1测验 232
13.5问与答 232
13.6工作室 232
第14章 创建视图 234
14.1视图简介 234
14.2使用视图 234
14.2.1考察简单视图 236
14.2.2更改列名 238
14.2.3查看SQL视图处理过程 239
14.2.5在视图中修改数据 243
14.2.4使用SELECT语句的限制 243
14.2.6与使用视图修改数据有关的问题 246
14.2.7视图的一般应用 246
14.2.8用DROP VIEW语句删除视图 249
14.3小结 250
14.4问与答 250
14.5工作室 251
14.5.1测验 251
14.5.2练习 251
第二篇回顾 252
第三篇 253
本篇概要 253
第15章 在表上创建索引以提高数据库性能 254
15.1使用索引 254
15.1.1索引是什么 254
15.1.2索引技巧 259
15.1.3在多个字段上建立索引 260
15.1.4使用带有UNIQUE关键字的CREATE INDEX语句 261
15.1.5索引与链接 262
15.1.6使用聚族(cluster) 263
15.2小结 264
15.3问与答 264
15.4工作室 265
15.4.1测验 265
15.4.2练习 265
第16章 优化SQL语句以提高性能 267
16.1提高SQL语句的可读性 267
16.2避免扫描整个表 268
16.4查询中各成分的安排 269
16.3增加一个新索引 269
16.4.1过程 271
16.4.2避免使用OR 271
16.5联机分析处理(OLAP)与联机事务处理(OLTP) 272
16.5.1 OLTP调整 273
16.5.2 OLAP调整 273
16.6成批装入与事务处理 273
16.7通过删除索引优化数据装载 275
16.8经常提交数据——保证系统正常运行的关键 275
16.9在动态环境中重建表和索引 276
16.10调整数据库 278
16.11影响数据库性能的因素 280
16.12内置调整工具 280
16.13小结 281
16.14问与答 281
16.15工作室 282
16.15.1测验 282
16.15.2练习 282
第17章 数据库安全性 284
17.1数据库管理员须知 284
17.3如何确保数据库的安全性 285
17.2流行的数据库产品及其安全性 285
17.4 Personal Oracle8和安全性 286
17.4.1创建用户 286
17.4.2创建角色(Role) 287
17.4.3用户特权 288
17.4.4用户访问视图 289
17.4.5用视图实现安全性 294
17.4.6使用同义词代替视图 295
17.4.7使用WITH GRANT OPTION子句 297
17.5小结 298
17.6问与答 298
17.7工作室 299
17.7.1测验 299
17.7.2练习 299
第18章 数据字典 300
18.1数据字典介绍 300
18.2数据字典的用户 300
18.3.1 Oracle的数据字典 301
18.3.2 Sybase的数据字典 301
18.3数据字典的内容 301
18.4 Oracle数据字典的剖析 302
18.4.1用户视图 302
18.4.2系统DBA视图 309
18.4.3动态性能视图 318
18.4.4 PLAN表 320
18.5小结 320
18.7.2练习 321
18.7.1测验 321
18.7工作室 321
18.6问与答 321
第19章 存储过程、触发器和嵌入式SQL语言 322
19.1创建临时表 322
19.2使用游标 327
19.2.1创建游标 327
19.2.2打开游标 328
19.2.3滚动游标 328
19.2.4测试游标的状态 329
19.2.5关闭游标 330
19.3创建并使用存储过程 331
19.2.6游标的使用域 331
19.3.1使用存储过程参数 333
19.3.2删除存储过程 334
19.3.3嵌套存储过程 335
19.4设计和使用触发器 336
19.4.1触发器和事务 337
19.4.2使用触发器的限制 339
19.4.3嵌套触发器 339
19.5在执行之前测试SELECT语句 339
19.6.1静态和动态SQL语言 340
19.6使用嵌入式SQL语言 340
19.7使用SQL编程 341
19.8小结 342
19.9问与答 342
19.10工作室 343
19.10.1测验 343
19.10.2练习 343
第20章 SQL语言新标准——SQL3中的新对象 344
20.1 CREATE ROLE语句探讨 344
20.2创建触发器 346
20.3使用CREATE TYPE语句 348
20.4小结 351
20.5问与答 351
20.6工作室 352
20.6.1测验 352
20.6.2练习 352
第21章 使用SQL语言生成SQL语句 353
21.1使用SQL语言生成SQL语句的目的 353
21.2.1 SET ECHO ON/OFF 354
21.2几个SQL* Plus命令 354
21.2.2 SET FEEDBACK ON/OFF 355
21.2.3 SET HEADING ON/OFF 355
21.2.4 SPOOL FILENAME/OFF 355
21.2.5 START FILENAME 355
21.2.6 ED FILENAME 355
21.3统计所有表中的行数 356
21.4为多个用户授予系统权限 360
21.5将表的权限授予其他用户 362
21.6为装入数据而废除对表的结束 364
21.7在单个区域内创建大量的同义词 365
21.8在表上创建视图 368
21.9截断某一用户的所有表 370
21.10使用SQL语句生成Shell 370
21.11对表和索引进行逆向工程 372
21.12小结 372
21.14工作室 373
21.14.1测验 373
21.13问与答 373
21.14.2练习 374
第三篇回顾 375
附加篇 377
本篇概要 377
第22章 SQL语句的调试 378
22.1常见错误 378
22.1.1表或视图不存在 378
22.1.2无效的用户名或口令 379
22.1.3没有FROM关键字 379
22.1.4不允许使用分组函数 380
22.1.5无效的列名 381
22.1.6缺少关键字 381
22.1.7缺少左括号 382
22.1.8缺少右括号 382
22.1.9缺少逗号 383
22.1.10列名定义不明确 383
22.1.11 SQL命令没有正常结束 384
22.1.12缺少表达式 384
22.1.14缺少数据值 385
22.1.13函数缺少参数 385
22.1.15完整性约束冲突——双亲主键没有找到 386
22.1.16 Oracle不能使用 386
22.1.17向列中插入的数据太大 387
22.1.18远程数据库服务器不能识别连接描述符中的系统ID号 387
22.1.19没有授权的权限 387
22.1.20语句中的无效字符——Escape字符 388
22.1.21不能创建操作系统文件 388
22.2常见的逻辑错误 388
22.2.1在SQL语句中使用保留字 388
22.2.2在多个选择列上使用DISTINCT命令 389
22.2.3删除不合适的表 390
22.2.4在多模式的数据库中公共同义词的使用 390
22.2.5可怕的笛卡尔乘积 390
22.2.6数据输入质量不高 391
22.2.7采用不合适的文件系统结构 391
22.2.8对于很大的表采用缺省的存储参数 391
22.2.9将数据库对象存储到系统表空间中 392
22.4小结 393
22.3.1在数据库中查找重复的记录 393
22.3防止数据出现麻烦 393
22.2.11没有规划好系统资源的使用 393
22.2.10大量的备份文件没有压缩 393
22.5问与答 394
22.6工作室 394
22.6.1测验 394
22.6.2练习 395
第23章 创建复合查询 396
23.1本章使用的表 396
23.2.1根据生日计算年龄 399
23.2复合查询的例子 399
23.2.2将一个DAY函数分解成小时、分和秒 400
23.2.3将字节转换成KB和MB 401
23.2.4数据库中段的报表 402
23.2.5 DML中的子查询 402
23.2.6格式化日期 403
23.2.7包含取最大值的子查询 404
23.2.8多个子查询 405
23.2.9使用破折号和括号格式化数值型数据 405
23.2.11在一个列中查找下一个最大的数值 406
23.2.10将数值型数据按给定的百分比递增 406
23.2.12空值(NULL)处理 408
23.3建立复合查询的技巧 410
23.4小结 411
23.5问与答 411
23.6工作室 411
23.6.1测试 411
23.6.2练习 412
24.2 SQL*Plus缓冲区 413
第24章 用Oracle的SQL*Plus生成满意的报表 413
24.1 SQL*Plus介绍 413
24.3用DESCRIBE命令查看表结构 417
24.4用SHOW命令显示系统设置 418
24.5用文件命令操作文件 420
24.5.1 SAVE、GET和EDIT命令 420
24.5.2运行SQL文件 420
24.5.3存储查询结果 422
24.6用SET命令设置工作环境 423
24.7使用LOGIN SQL文件 426
24.8用CLEAR命令清除SQL*Plus的设置 427
24.9格式化输出结果 428
24.9.1 TTITLE和BTITLE命令 428
24.9.2格式化的列(列、标题、格式) 429
24.10创建报表和分组合计 430
24.10.1 BREAK ON 430
24.10.2 COMPUTE 431
24.11.1替代变量( ) 434
24.11在SQL*Plus中使用变量 434
24.11.2 DEFINE 435
24.11.3 ACCEPT 435
24.11.4 NEW_VALUE 437
24.12使用DUAL表 438
24.13 DECODE函数 439
24.14日期转换 442
24.15执行一系列SQL文件 444
24.16在SQL脚本文件中加注释 445
24.17高级报表 446
24.18小结 447
24.19问与答 447
24.20工作室 448
24.20.1测验 448
24.20.2练习 448
第25章 Oracle的PL/SQL语言简介 449
25.1 PL/SQL介绍 449
25.2 PL/SQL中的数据类型 449
25.2.3二进制数据类型 450
25.2.2数值数据类型 450
25.2.1字符串数据类型 450
25.2.4日期数据类型 451
25.2.5布尔型 451
25.2.6行号(ROWID) 451
25.3 PL/SQL程序块结构 451
25.4 DECLARE部分 452
25.4.1变量赋值 452
25.4.2常量赋值 452
25.4.5 %ROWTYPE属性 453
25.4.3游标的定义 453
25.4.4 %TYPE属性 453
25.4.6 %ROWCOUNT属性 454
25.5 PROCEDURE部分 454
25.5.1 BEGIN…END语句 454
25.5.2游标控制命令 455
25.5.3条件语句 456
25.6.1异常事件的触发 459
25.6.2异常事件处理程序的执行 459
25.6 EXCEPTION部分 459
25.6.3插入注解 460
25.6.4 PL/SQL程序块的执行 460
25.6.5为用户显示输出结果 461
25.7 PL/SQL中的事务控制 461
25.8 PL/SQL程序的完整介绍 462
25.8.1样表和数据 462
25.8.2 PL/SQL程序块实例 463
25.8.3另一个实例 466
25.9存储过程、程序包和触发器 469
25.9.1存储过程样本 470
25.9.2程序包样本 471
25.9.3触发器样本 471
25.10小结 473
25.11问与答 474
25.12工作室 474
25.12.1测验 474
25.12.2练习 475
26.2对ANSI SQL语言的扩充 476
26.2.1 Transact-SQL面向哪些用户 476
第26章 Transact-SQL介绍 476
26.1 Transact-SQL概述 476
26.2.2 Transact-SQL的基本构成 477
26.3数据类型 477
26.3.1字符串类型 477
26.3.2数值数据类型 477
26.3.5二进制串 478
26.3.6位(bit)——一种逻辑数据类型 478
26.3.4货币数据类型 478
26.3.3日期数据类型 478
26.4使用Transact-SQL访问数据库 479
26.4.1 BASEBALL数据库 479
26.4.2局部变量的声明 481
26.4.3全局变量的声明 481
26.4.4变量的使用 483
26.4.5 PRINT命令 484
26.5建立程序流程控制 484
26.5.1 BEGIN和END语句 484
26.5.2 IF…ELSE语句 485
26.5.4测试查询结果 487
26.5.3 EXISTS条件 487
26.5.5 WHILE循环 488
26.5.6 BREAK命令 488
26.5.7 CONTINUE命令 489
26.5.8使用WHILE循环滚动访问一个表 489
26.6 Transact-SQL通配符 490
26.7使用COMPUTE命令创建合计报表 491
26.8日期转换 491
26.9 SQL Server的诊断工具——SET命令 492
26.11问与答 493
26.10小结 493
26.12工作室 494
16.12.1测验 494
26.12.2练习 494
第27章 Visual C++和Delphi中的动态SQL语言 495
27.1几个应用程序开发工具简介 495
27.1.1 ODBC 495
27.1.2 Personal Oracle8 495
27.1.3 InterBase SQL 495
27.1.5 Delphi 496
27.1.4 Visual C++ 496
27.3创建数据库 497
27.2开始运行Oracle和InterBase 497
27.4 用Microsoft Query执行连接 502
27.5使用Visual C++和SQL 505
27.6使用Delphi和SQL 511
27.9工作室 517
27.9.2练习 517
27.9.1测验 517
27.8问与答 517
27.7小结 517
第28章 MySQL介绍 518
28.1 MySQL管理 518
28.1.1 MySQL安装 518
28.1.2启动和停止MySQL 519
28.1.3 MySQL的初始权限 519
28.2 MySQL客户端程序 520
28.2.1连接数据库 520
28.2.2命令行选项 520
28.2.3输入MySQL客户端命令 521
28.2.4执行命令的历史记录 523
28.2.5批处理模式 523
28.2.6 SHOW命令 524
28.3 MySQL实用程序 524
28.4小结 525
28.5问与答 525
28.6工作室 525
28.6.1测验 525
28.6.2练习 526
附加篇回顾 527
附录 530
附录A 答案 530
附录B 创建表的实例代码 571
附录C 生成Populate表中数据的代码 575
附录D 第27章的C++程序源代码 586
附录E 第27章的Delphi程序源代码 601
附录F 常用SQL命令术语 603
附录G ASCII码表 609
附录H 相关资源 614