第一部分 设计和构造数据库 2
第1章 结构化查询语言 2
1.1 关系模型 2
1.1.1 关于数据结构的规则 4
1.1.2 关于数据处理的规则 4
1.1.3 关于数据完整性的规则 5
1.2 SQL语言 5
1.2.1 数据处理 6
1.2.2 数据定义 6
1.2.3 数据库管理 7
1.3 SQL标准 7
1.4 SQL句法 8
1.4.1 区分大小写 8
1.4.2 空白 9
1.4.3 嵌套 9
1.4.4 引用字符串 10
1.4.5 括号 11
1.5 关系操作 12
1.5.1 选择 12
1.5.2 投影 12
1.5.3 联接 13
1.6 数据库应用程序传送 14
1.6.1 基于主机的应用程序 14
1.6.2 客户机/服务器时代 14
1.6.3 通过Web传送数据库应用程序 15
1.6.4 命令行界面 16
1.7 实际应用 16
第2章 数据库设计 18
2.1 数据库结构 19
2.2 数据库的好与坏 19
2.2.1 好数据库的属性 19
2.2.2 劣质数据库的症状 20
2.3 设计过程 20
2.5 组织数据 21
2.4 设计的预设计阶段 21
2.6 函数依赖和候选关键字 22
2.6.1 函数依赖 23
2.6.2 候选关键字和主关键字 25
2.6.3 欺骗 25
2.7 实体-关系建模 26
2.7.1 标识实体 26
2.7.2 标识属性 27
2.7.4 1对1关系 28
2.7.3 标识关系 28
2.7.5 多对1关系 29
2.7.6 多对多关系 29
2.7.7 绘制关系图 30
2.8 规范化 31
2.8.1 无损分解 31
2.8.2 第一范式 32
2.8.3 第二范式 33
2.8.4 第三范式 34
2.8.5 Boyce-Codd范式 36
2.8.6 高级范式 37
2.8.7 消除规范化处理 38
2.9 实际应用 38
第3章 创建数据库 40
3.1 创建数据库 40
3.2 选择要访问的数据库 41
3.3 创建表 41
3.4 关系数据类型 42
3.4.1 字符串数据 43
3.4.2 数字数据 44
3.4.3 时间数据类型 44
3.5 指定关键字 44
3.5.1 外部关键字 46
3.6 列约束 46
3.6.1 禁止空值 47
3.6.2 其他限制 47
3.8 Movie lnfo数据库的设计 48
3.7 默认值 48
3.8.1 Movies表 49
3.8.2 Studios表 51
3.8.3 People表 51
3.8.4 Cast_Movies表 52
3.8.5 Locations表 52
3.9 索引 53
3.9.1 创建惟一的索引 53
3.9.4 何时不作索引 54
3.9.2 群集索引 54
3.9.3 对列作索引的原因 54
3.10 实际应用 55
第4章 创建、更改及删除记录 56
4.1 准备数据 56
4.2 INSERT语句 57
4.2.1 插入空值和默认值 58
4.3 同时使用SELECT和INSERT 59
4.3.1 复制表和删除重复行 60
4.4 DELETE语句 64
4.5 UPDATE语句 64
4.6 TRUNCATE语句 65
4.7 DROP语句 66
4.7.1 DROP表 66
4.7.2 DROP索引 67
4.8 ALTER语句 67
4.8.1 ALTER表 67
4.9 实际应用 69
第二部分 从数据库中检索数据 72
第5章 SELECT语句 72
5.1 剖析SELECT语句 72
5.2 指定要检索的列 73
5.2.1 使用*来选定所有的列 75
5.3 在选定的数据上完成计算 76
5.3.1 将表达式包括在SELECT语句中 76
5.3.2 在表达式中使用列名称 77
5.3.3 SQL支持的算术运算符 78
5.4 对Name列和表达式使用AS 79
5.5 使用WHERE子句筛选查询结果 81
5.5.1 执行比较的运算符 81
5.5.2 字符串比较中区分大小写 84
5.5.3 在WHERE子句中执行计算 84
5.6 处理空值 85
5.6.1 检验空值 85
5.6.2 对其他查询中的空值进行说明 86
5.7 对查询结果排序 88
5.7.1 使用ORDER BY 88
5.7.2 按照降序排列记录 90
5.7.3 通过表达式来排序 90
5.7.4 次级排序 91
5.8 怎样决定字符串是否相等 93
5.8.1 怎样比较字符串 94
5.8.2 为忽略大小写的字符串排序 94
5.9 实际应用 95
5.8.3 字符集 95
第6章 使用WHERE子句 96
6.1 重述WHERE子句 96
6.2 在WHERE子句中使用逻辑运算符 97
6.2.1 编程逻辑 97
6.2.2 AND运算符 97
6.2.3 OR运算符 98
6.2.4 NOT运算符 98
6.2.5 使用多个布尔运算符 99
6.2.6 运算符先后顺序 100
6.3 IN子句 101
6.3.1 IN和子查询 102
6.3.2 IN与OR 102
6.3.3 NOT IN 102
6.4 BETWEEN子句 103
6.4.1 NOT BETWEEN 105
6.4.2 BETWEEN和临时数据 105
6.5 使用LIKE来匹配字符串各部分 106
6.4.3 BETWEEN和字符串 106
6.5.1 构建模式 107
6.5.2 使用LIKE的复合WHERE子句 108
6.5.3 对通配符转义 109
6.5.4 LIKE与性能 110
6.5.5 匹配一个或多个字符 110
6.6 对WHERE子句有用的函数 110
6.6.1 删除多余空格 111
6.6.2 字符串长度 111
6.6.3 类型转换函数 111
6.6.4 嵌套函数 112
6.6.5 聚集函数 112
6.7 实际应用 112
第7章 聚集查询结果 114
7.1 使用DISTINCT选择惟一值 114
7.1.1 选择值的DISTINCT组合 115
7.1.2 DISTINCT和NULL 116
7.2 聚集函数 117
7.2.1 聚集函数和WHERE子句 118
7.2.2 重新命名聚集查询结果 118
7.3 COUNT()函数 119
7.3.1 COUNT()和空值 119
7.3.2 COUNT()和DISTINCT 119
7.4 SUM和AVG函数 120
7.4.1 MIN()和MAX()函数 121
7.5 将聚集拆分为类别 121
7.5.1 GROUP BY子句 122
7.5.2 组与子组 124
7.5.3 GROUP GY和ORDER BY 125
7.5.4 将GROUP BY与WHERE子句一起使用 127
7.6 使用HAVING筛选查询结果 128
7.6.1 复合表达式和HAVING子句 128
7.6.2 HAVING和WHERE 129
7.7 实际应用 129
8.2 什么是联接 132
8.1 联接和规范化 132
第8章 使用联接来结合表 132
8.2.1 可兼容联接的列 133
8.2.2 联接条件 135
8.3 使用联接 135
8.3.1 决定选择什么列 136
8.3.2 缩减表名 137
8.3.3 联接与关系 138
8.4 怎样处理联接 138
8.5 联接的类型 139
8.5.1 自然联接 139
8.5.2 基于其他条件的联接 140
8.5.3 自联接 141
8.6 对两个以上表的联接 142
8.6.1 使用联接表 144
8.7 外联接 145
8.8 UNION联接 147
8.8.1 ALL运算符 149
8.8.2 将UNION与ORDER BY结合在一起 150
8.8.3 INTERSECT 152
8.8.4 MINUS 152
8.9 SQL-92联接句法 153
8.9.1 内联接 153
8.9.2 外联接 155
8.10 实际应用 156
9.1 什么是子查询 158
第9章 子查询 158
9.1.1 用联接来代替子查询 159
9.2 子查询类型 160
9.2.1 无关子查询 160
9.2.2 相关子查询 160
9.3 返回值的清单的子查询 161
9.3.1 与IN一起使用子查询 161
9.3.2 与相关子查询一起使用IN 163
9.3.3 用子查询来代替自联接 163
9.3.4 子查询和NOT IN 165
9.3.5 使用EXISTS 166
9.3.6 使用NOT EXISTS来查找空组 167
9.3.7 与ANY和ALL一起使用比较运算符 167
9.3.8 使用ANY 168
9.3.9 使用ALL 169
9.4 返回单个值的子查询 170
9.4.1 子查询和聚集函数 171
9.5.1 嵌套子查询 173
9.5 编写复杂的查询 173
9.5.2 结合子查询与联接 174
9.5.3 在HAVING子句中使用子查询 175
9.6 在UPDATE和DELETE语句中使用子查询 175
9.6.1 与DELETE一起使用子查询 175
9.6.2 与UPDATE一起使用子查询 176
9.7 与INSERT一起使用子查询 177
9.8 实际应用 178
10.1 创建表 182
第三部分 数据库管理 182
第10章 使用视图 182
10.2 使用视图的优点 184
10.2.1 方便 184
10.2.2 隐藏规范化效果 184
10.2.3 限制用户可用的数据 185
10.2.4 创建抽象层 186
10.3 创建列的别名 186
10.4 单表视图 187
10.4.1 具有表达式和函数的视图 188
10.4.2 在视图中使用聚集函数 189
10.5 使用联接的视图 191
10.6 使用子查询创建视图 192
10.7 在视图中使用其他联接操作 193
10.8 嵌套视图 194
10.9 更新视图 195
10.10.1 范例中的表 198
10.10 用视图可以完成的任务 198
10.10.2 系统如何工作 199
10.10.3 系统中的视图 200
10.10.4 文章检索查询 202
10.11 实际应用 203
第11章 SQL安全模型 205
11.1 数据库安全概览 205
11.1.1 数据库管理员账号 206
11.1.2 数据库所有者 206
11.2 创建数据库用户 206
11.2.1 修改用户 207
11.2.2 删除用户 207
11.3 数据库元素 207
11.3.1 数据库 207
11.3.2 表 209
11.3.3 视图 209
11.4 使用GRANT和REVOKE 210
11.3.4 列和视图列 210
11.4.1 公共用户 212
11.4.2 允许用户授予特权 212
11.4.3 授予和撤销的顺序 213
11.5 安全角色 213
11.5.1 创建和撤销角色 213
11.5.2 对用户分配角色 213
11.5.3 将角色分配给其他角色 216
11.6 视图和数据库安全 217
11.6.1 通过视图对访问权作自定义处理 218
11.7 实际应用 221
第四部分 实际应用中的问题 224
第12章 处理具体的数据类型 224
12.1 数字数据类型 225
12.1.1 排序数字 225
12.1.2 空值和数字 227
12.1.3 数学表达式 227
12.1.5 对数字作格式化处理 229
12.1.4 常用数学函数 229
12.2 字符串数据类型 231
12.2.1 并置字符串 231
12.2.2 字符串函数 232
12.2.3 搜索字符串 232
12.2.4 子字符串 233
12.2.5 将搜索与子字符串结合在一起 233
12.2.6 探测法 235
12.3 处理日期 236
12.3.1 对输出的日期作格式化处理 237
12.3.2 对输入的日期作格式化处理 237
12.3.3 日期算法 238
12.3.4 比较日期 240
12.3.5 四舍五入时间值 241
12.4 转换数据类型 241
12.4.1 CONVERT()函数 242
12.4.2 在Oracle中转换数据类型 244
12.5 实际应用 247
第13章 数据库性能和完整性 248
13.1 改进数据库性能 248
13.1.1 数据库设计中的性能考虑因素 248
13.2 性能测量工具 249
13.2.1 Oracle自动跟踪 249
13.2.2 Transact-SQL SHOWPLAN 252
13.3 索引 253
13.3.1 群集索引 253
13.3.2 利用索引的查询 254
13.4 查询优化程序 255
13.4.1 查询优化程序的工作方式 255
13.4.2 索引和优化程序 256
13.4.3 处理应用查询中的多个索引 257
13.4.4 数据集操作 259
13.4.5 查询优化程序和视图 259
13.4.7 联接操作 260
13.4.8 联接相关的提示 260
13.4.6 查询优化程序和子查询 260
13.5 数据完整型 261
13.6 完整性与性能 262
13.7 实际应用 262
第14章 事务和游标 265
14.1 事务 265
14.1.1 事务的工作方式 266
14.2 在Oracle中使用事务 266
14.3 在Transact-SQL中使用事务 268
14.2.1 自动提交 268
14.4 数据库锁定 270
14.4.1 锁定的类型 271
14.4.2 事务和存储过程 271
14.5 事务日志 272
14.6 游标 272
14.7 在Transact-SQL中使用游标 273
14.7.1 声明游标 273
14.7.3 从游标获取行 274
14.7.2 打开游标 274
14.7.4 用游标更新或删除 275
14.7.5 关闭和释放游标 276
14.8 在Oracle PL/SQL中使用游标 277
14.8.1 声明游标 277
14.8.2 在PL/SQL程序内使用游标 278
14.8.3 游标属性 278
14.8.4 游标循环 279
14.9 实际应用 281
第15章 编写存储过程 284
第五部分 存储过程 284
15.1 编写存储过程 285
15.1.1 向存储过程传送参数 286
15.2 使用变量 288
15.2.1 设置变量 289
15.3 定义代码块 291
15.4 使用IF的条件语句 292
15.4.2 IF语句使用代码块 293
15.4.1 在IF表达式中使用查询 293
15.4.4 嵌套IF语句和块 294
15.4.3 使用IF…ELSE 294
15.5 使用循环 296
15.5.1 WHILE循环 297
15.5.2 无限循环 298
15.5.3 使用CONTINUE重新启动循环 299
15.5.4 嵌套循环 300
15.6 循环游标 301
15.7 触发器 303
15.7.1 创建触发器 303
15.7.2 删除触发器 304
15.7.3 编写触发器 304
15.7.4 基于列约束触发器 305
15.8 实际应用 305
16.1 通用Transact-SQL编程信息 307
16.2 全局变量 307
第16章 详述Transact-SQL存储过程 307
16.3 使用RETURN离开存储过程 309
16.4 处理错误 309
16.4.1 使用RAISERROR 309
16.4.2 在Microsoft SQL Server中使用RAISERROR 310
16.4.3 在Sybase中使用RAISERROR 312
16.4.4 捕获错误 313
16.4.6 创建用户定义的错误消息 314
16.4.5 使用RETURN语句 314
16.5 使用临时对象 315
16.5.1 tempdb的工作方式 315
16.5.2 创建临时表 315
16.5.3 临时对象的类 316
16.5.4 永久的临时对象 316
16.6 WAITFOR 317
16.7 高级触发器写技术 317
16.7.1 ROLLBACK触发器 317
16.7.2 在触发器中使用INSERTED和DELETED表 318
16.8 实际应用 319
第17章 编写Oracle PL/SQL存储过程 321
17.1 声明节 322
17.1.1 常量 323
17.1.2 游标声明 323
17.2 执行节 324
17.2.1 从PL/SQL中提取数据 324
17.2.2 变量赋值 324
17.2.3 条件语句 324
17.2.4 循环 326
17.2.5 游标循环 326
17.2.6 FOR循环 327
17.2.7 FOR循环与游标 327
17.2.8 WHILE循环 328
17.2.9 WHILE循环与游标 328
17.2.11 变量值的选择 329
17.2.10 GOTO 329
17.3 异常情况处理 330
17.3.1 定义自己的异常情况 331
17.4 编写存储过程 332
17.4.1 过程的创建 333
17.4.2 存储过程的执行 333
17.5 定制函数的创建与使用 334
17.6.1 创建包清单 335
17.6 在包中捆绑过程和函数 335
17.7 PL/SQL查询调试 337
17.7.1 SHOW ERRORS 337
17.7.2 DBMS_OUTPUT 338
17.8 触发器 338
17.8.1 编写触发器 340
17.8.2 INSTEAD OF触发器 341
17.8.3 触发器的操作 342
17.9 实际应用 342
18.1 SQL*PLUS 346
第18章 Oracle 346
第六部分 特殊数据库 346
18.1.1 启动SQL*PLUS 347
18.1.2 SQL*PLUS的使用 348
18.1.3 加载SQL*PLUS脚本 349
18.1.4 login.sql脚本 350
18.1.5 编辑SQL命令 350
18.1.6 将SQL*PLUS的输出结果存入文件 351
18.1.7 输出显示控制 352
18.2 在SQL*PLUS中创建报表 354
18.2.1 创建报表标题 354
18.2.2 数据显示形式转换 354
18.2.3 其他数据操作命令 357
18.3 Oracle系统视图 359
18.3.1 系统视图的使用 360
18.4 序列 361
18.5 同义词 363
18.6 Oracle数据类型 364
18.8 实际应用 365
18.7 Oracle的Web资源 365
第19章 Microsoft SQL Server和Sybase Adaptive Server 367
19.1 Transact-SQL数据库工具 367
19.1.1 SQL Enterprise Manager 368
19.1.2 SQL Server Query Analyzer 369
19.1.3 SQL Central 369
19.1.4 ISQL 371
19.3 SELECT…INTO 372
19.2 Transact-SQL中的对象命名 372
19.4 系统函数 373
19.4.1 用户标识 373
19.4.2 数据库或服务器标识 373
19.4.3 数据比较函数 374
19.4.4 数据验证函数 375
19.5 CASE语句 375
19.5.1 复合CASE语句 376
19.5.2 CASE与GROUP BY 378
19.5.3 在UPDATE语句中使用CASE 379
19.6 系统存储过程 380
19.6.1 与安全性相关的过程 380
19.6.2 远程服务器过程 383
19.6.3 数据定义过程 383
19.7 Transact-SQL数据类型 386
19.8 实际应用 387
20.1 Microsoft数据库文件 389
第20章 Microsoft Access 389
20.2 ODBC 390
20.3 Access界面 390
20.4 Microsoft Access中的对象 390
20.4.1 表 391
20.4.2 查询 392
20.4.3 窗体 393
20.4.4 报表 393
20.4.6 模块 394
20.4.5 宏 394
20.5 表的创建 395
20.5.1 在数据表视图中创建表 395
20.5.2 设计视图中表的创建 397
20.5.3 编写数据定义查询 399
20.6 数据类型 399
20.7 查询的创建与运行 401
20.7.1 在设计视图中创建查询 401
20.7.2 在SQL视图中编写查询 404
20.8 ODBC数据源的创建 404
20.9 Microsoft Access资源 405
20.10 实际应用 406
第21章 MSQL与MySQL 408
21.1 MySQL和MSQL的获取 409
21.2 MySQL与MSQL的对比 409
21.3 MySQL的使用 410
21.3.1 MySQL客户 410
21.4 MySQL的功能 412
21.5 MySQL的局限性 414
21.5.1 没有子查询 414
21.5.2 无事务 415
21.5.3 存储过程、触发器和游标 415
21.5.4 外部关键字关系 415
21.6 MySQL的数据类型 416
21.7 MySQL的语法结构 418
21.8 MSQL 420
21.7.1 注释 420
21.8.1 在MSQL中运行查询 421
21.8.2 在MSQL中创建数据库对象 421
21.8.3 撤销MSQL中的对象 423
21.8.4 其他MSQL查询 423
21.9 MSQL和MySQL中字符串的比较 423
21.9.1 RLIKE的使用 424
21.10 实际应用 425
22.1 基本Web构架 428
第22章 Web的程序设计准则 428
第七部分 Web数据库 428
22.2 HTML 429
22.3 HTML表单的创建 429
22.4 使用标记创建的表单字段 431
22.4.1 文本字段 431
22.4.2 密码字段 432
22.4.4 单选按钮 433
22.4.5 文件上载 433
22.4.3 复选框 433
22.4.6 隐藏字段 434
22.4.7 提交按钮 434
22.4.8 重置按钮 435
22.4.9 使用图像作为提交按钮 436
22.4.10 选择列表 436
22.4.11 文本区 438
22.5 公共网关接口 439
22.5.2 为Web浏览器返回数据 440
22.5.1 表单数据的处理 440
22.6 XML 441
22.6.1 XML与Web发布 442
22.6.2 XML与关系数据库 442
22.7 实际应用 443
第23章 Web应用程序服务器 444
23.1 Web应用程序服务器分类概述 444
23.2 Web应用程序服务器的一般原理 445
23.3 独立程序 446
23.4 Perl/CGI 446
23.4.1 在数据库中存储表单数据 449
23.4.2 从CGI程序查询数据库 452
23.5 嵌入式HTML代码 454
23.6 Allaire的ColdFusion 455
23.6.1 ColdFusion对数据库的查询 455
23.7 Active Server Pages 458
23.7.1 使用ASP进行的数据库查询 459
23.8 Java Servlets 460
23.9 模板系统 461
23.9.1 模板应用程序服务器的工作原理 462
23.10 实际应用 462
第24章 Web应用程序实例 464
24.1 电影应用程序的基础构架 464
24.2 电影列表页 465
24.3 电影明细页 469
24.4 键入新电影 475
24.4.1 验证组件 478
24.4.2 表单组件 480
24.5 更新现有电影 484
24.6 编辑电影的演员表 487
24.7 修改电影的拍摄场景 498
24.8 项目删除 501
24.9 实际应用 501
附录A PL/SQL中系统定义的异常情况 503