第1章 关系数据库 1
1.1 数据库简介 2
1.1.1 什么是数据和数据库 2
1.1.2 数据库发展史 2
1.1.3 数据库模型 3
1.2 关系数据库简介 5
1.2.1 什么是关系数据库 5
1.2.2 关系数据库术语 6
1.2.3 关系数据完整性 7
1.3 关系规范化 8
1.3.1 第一范式 9
1.3.2 第二范式 9
1.3.3 第三范式 10
1.3.4 函数依赖 11
1.4 数据库建模 12
1.4.1 E-R模型 12
1.4.2 E-R图 14
1.4.3 E-R模型转换为关系模型 15
1.5 实践案例:设计学生成绩管理系统数据库模型 16
1.6 思考与练习 19
1.7 练一练 20
第2章 深入了解Oracle 11g 21
2.1 Oracle 11g概述 22
2.2 安装Oracle 11g 24
2.2.1 准备工作 25
2.2.2 实践案例:Oracle 11g安装过程详解 25
2.2.3 实践案例:验证安装结果 32
2.3 查看Oracle系统用户 32
2.4 实践案例:创建学生管理系统数据库 33
2.5 Oracle的物理结构 38
2.5.1 控制文件 38
2.5.2 数据文件 38
2.5.3 重做日志文件 40
2.5.4 其他存储结构文件 41
2.6 Oracle的逻辑结构 41
2.6.1 表空间 42
2.6.2 段 43
2.6.3 区 44
2.6.4 块 44
2.7 Oracle的内存结构 45
2.7.1 Oracle内存结构概述 45
2.7.2 系统全局区 46
2.7.3 程序全局区 49
2.8 Oracle的进程结构 49
2.8.1 Oracle进程结构概述 49
2.8.2 后台进程的结构 50
2.9 Oracle数据字典 52
2.9.1 数据字典概述 52
2.9.2 常用数据字典 53
2.10 思考与练习 56
2.11 练一练 57
第3章 Oracle管理工具 59
3.1 命令行工具——SQL Plus 60
3.1.1 运行SQL Plus 60
3.1.2 实践案例:重启数据库 61
3.1.3 断开连接 62
3.2 SQL Plus实用命令 63
3.2.1 查看表结构 63
3.2.2 编辑SQL语句 64
3.2.3 保存缓存区内容 67
3.2.4 读取内容到缓存区 68
3.2.5 运行外部文件的命令 69
3.2.6 编辑外部文件的命令 69
3.2.7 将执行结果保存到文件 70
3.3 SQL Plus中变量的使用 71
3.3.1 临时变量 71
3.3.2 已定义变量 73
3.3.3 实践案例:带提示的变量 74
3.4 实践案例:使用图形管理工具SQL Developer 75
3.4.1 打开SQL Developer 75
3.4.2 连接Oracle 76
3.4.3 创建表 78
3.4.4 修改列 80
3.4.5 添加数据 81
3.4.6 导出数据 83
3.4.7 执行存储过程 86
3.5 Web管理工具——OEM 89
3.5.1 运行OEM 90
3.5.2 使用OEM管理Oracle 91
3.6 实践案例:Oracle Net Configuration Assistant工具 93
3.7 实践案例:Oracle Net Manager工具 96
3.8 思考与练习 97
3.9 练一练 98
第4章 操作Oracle数据表 101
4.1 了解列的数据类型 102
4.2 创建数据表 103
4.2.1 数据表创建规则 103
4.2.2 使用CREATE TABLE语句创建表 104
4.2.3 使用OEM工具创建表 106
4.3 添加表属性 108
4.3.1 指定表空间 108
4.3.2 指定存储参数 109
4.3.3 指定重做日志 110
4.3.4 指定缓存 110
4.4 修改表 111
4.4.1 修改表名 111
4.4.2 修改列 111
4.4.3 增加列 113
4.4.4 删除列 114
4.4.5 修改表空间和存储参数 114
4.4.6 删除表 115
4.5 约束表中的数据 116
4.5.1 数据完整性简介 116
4.5.2 约束的分类和定义 117
4.5.3 非空约束 117
4.5.4 主键约束 119
4.5.5 唯一性约束 121
4.5.6 检查约束 122
4.5.7 外键约束 123
4.6 操作约束 126
4.6.1 查询约束信息 126
4.6.2 禁止和激活约束 128
4.6.3 验证约束 129
4.6.4 延迟约束 129
4.7 实践案例:创建药品信息表 130
4.8 思考与练习 131
4.9 练一练 133
第5章 查询表数据 135
5.1 了解SQL语言 136
5.1.1 SQL语言的特点 136
5.1.2 SQL语言分类 136
5.1.3 SQL语句的编写规则 137
5.2 了解SELECT语句的语法 138
5.3 简单查询 138
5.3.1 查询所有列 139
5.3.2 查询指定列 139
5.3.3 为结果列添加别名 140
5.3.4 查询不重复数据 140
5.3.5 查询计算列 141
5.3.6 分页查询 142
5.4 按条件查询 143
5.4.1 比较条件 144
5.4.2 范围条件 145
5.4.3 逻辑条件 146
5.4.4 模糊条件 147
5.4.5 列表运算符 148
5.4.6 未知值条件 149
5.5 规范查询结果 149
5.5.1 排序 150
5.5.2 分组 151
5.5.3 筛选 152
5.6 实践案例:查询药品信息 152
5.7 思考与练习 154
5.8 练一练 155
第6章 高级查询 157
6.1 子查询 158
6.1.1 子查询的注意事项 158
6.1.2 在WHERE子句中的单行子查询 158
6.1.3 在HAVING子句中的单行子查询 160
6.1.4 单行子查询经常遇到的错误 161
6.1.5 子查询中的IN操作符 162
6.1.6 子查询中的ANY操作符 163
6.1.7 子查询中的ALL操作符 164
6.1.8 子查询中的EXISTS操作符 165
6.1.9 在UPDATE中使用子查询 165
6.1.10 在DELETE中使用子查询 166
6.1.11 多层嵌套子查询 167
6.2 多表查询 168
6.2.1 笛卡儿积 168
6.2.2 基本连接 169
6.3 内连接 171
6.3.1 等值内连接 171
6.3.2 非等值内连接 172
6.3.3 自然连接 173
6.4 外连接 174
6.4.1 左外连接 174
6.4.2 右外连接 175
6.4.3 完全连接 176
6.5 交叉连接 177
6.6 使用UNION操作符 178
6.6.1 获取并集 178
6.6.2 获取交集 179
6.7 差查询 180
6.8 交查询 180
6.9 实践案例:查询图书借阅信息 181
6.10 思考与练习 182
6.11 练一练 183
第7章 修改表数据 185
7.1 插入数据 186
7.1.1 INSERT语句简介 186
7.1.2 插入单行数据 186
7.1.3 插入多行数据 187
7.2 更新数据 189
7.2.1 UPDATE语句简介 189
7.2.2 UPDATE语句的应用 189
7.3 删除数据 190
7.3.1 DELETE语句简介 190
7.3.2 DELETE语句的应用 191
7.3.3 清空表 191
7.4 MERGE语句 192
7.4.1 MERGE语句简介 192
7.4.2 省略INSERT子句 193
7.4.3 省略UPDATE子句 194
7.4.4 带条件的UPDATE和INSERT子句 194
7.4.5 使用常量表达式 196
7.4.6 使用DELETE语句 197
7.5 思考与练习 198
7.6 练一练 199
第8章 Oracle表空间的管理 201
8.1 认识Oracle表空间 202
8.1.1 Oracle的逻辑和物理结构 202
8.1.2 表空间的分类 204
8.1.3 表空间的状态 204
8.2 实践案例:创建一个表空间 206
8.3 维护表空间 209
8.3.1 本地化管理 209
8.3.2 增加数据文件 210
8.3.3 修改数据文件 211
8.3.4 移动数据文件 212
8.3.5 删除表空间 213
8.4 实践案例:设置默认表空间 213
8.5 临时表空间 214
8.5.1 理解临时表空间 214
8.5.2 创建临时表空间 215
8.5.3 实践案例:管理临时表空间 216
8.5.4 临时表空间组 217
8.6 还原表空间 218
8.6.1 创建还原表空间 218
8.6.2 管理还原表空间 219
8.6.3 更改还原表空间的方式 220
8.7 实践案例:创建图书管理系统的表空间 222
8.8 思考与练习 222
8.9 练一练 224
第9章 管理Oracle控制文件和日志文件 225
9.1 Oracle控制文件简介 226
9.2 管理控制文件 227
9.2.1 创建控制文件 227
9.2.2 查询控制文件信息 230
9.2.3 备份控制文件 231
9.2.4 恢复控制文件 232
9.2.5 移动控制文件 233
9.2.6 删除控制文件 234
9.3 Oracle日志文件简介 234
9.4 管理日志文件 235
9.4.1 查看日志组信息 235
9.4.2 创建日志组 236
9.4.3 删除日志组 238
9.4.4 手动切换组 239
9.4.5 清空日志组 239
9.5 日志组成员 240
9.5.1 添加成员 240
9.5.2 删除成员 241
9.5.3 重定义成员 241
9.6 归档日志 243
9.6.1 设置数据库模式 243
9.6.2 设置归档目标 244
9.7 实践案例:查看数据文件、控制文件和日志文件 245
9.8 思考与练习 246
9.9 练一练 247
第10章 Oracle编程PL/SQL基础 249
10.1 PL/SQL简介 250
10.1.1 认识PL/SQL语言 250
10.1.2 PL/SQL编写规则 250
10.2 PL/SQL的基本结构 251
10.2.1 数据类型 251
10.2.2 变量和常量 252
10.2.3 运算符 253
10.2.4 注释 253
10.3 控制语句 254
10.3.1 PL/SQL程序块 254
10.3.2 IF语句 255
10.3.3 CASE语句 258
10.3.4 LOOP语句 262
10.3.5 WHILE语句 264
10.3.6 FOR语句 266
10.3.7 实践案例:打印九九乘法口诀表 266
10.4 异常处理 267
10.4.1 异常处理语句 267
10.4.2 系统异常 268
10.4.3 非系统异常 269
10.4.4 自定义异常 271
10.5 实践案例:获取指定部门下的所有员工信息 272
10.6 思考与练习 273
10.7 练一练 275
第11章 PL/SQL编程高级应用 277
11.1 使用PL/SQL集合 278
11.1.1 索引表 278
11.1.2 嵌套表 279
11.1.3 可变数组 282
11.1.4 集合方法 284
11.1.5 PL/SQL记录表 284
11.2 游标 285
11.2.1 声明游标 285
11.2.2 打开游标 286
11.2.3 检索游标 286
11.2.4 关闭游标 287
11.2.5 游标属性 287
11.2.6 LOOP语句循环游标 288
11.2.7 FOR语句循环游标 289
11.3 实践案例:使用游标更新和删除数据 290
11.4 系统函数 291
11.4.1 数学函数 291
11.4.2 字符函数 293
11.4.3 日期函数 295
11.4.4 聚合函数 296
11.4.5 转换函数 297
11.5 自定义函数 298
11.5.1 创建函数 298
11.5.2 调用函数 299
11.5.3 删除函数 299
11.5.4 输入和输出参数 300
11.6 实践案例:计算部门的员工平均工资 302
11.7 程序包 304
11.7.1 创建程序包 304
11.7.2 调用程序包中的元素 305
11.7.3 删除程序包 306
11.7.4 系统预定义包 306
11.8 数据库事务 307
11.8.1 事务的ACID特性 307
11.8.2 事务的隔离性级别 309
11.8.3 事务的开始与结束 310
11.8.4 事务的提交和回滚 310
11.8.5 设置保存点 311
11.8.6 并发事务 312
11.8.7 事务锁 314
11.9 思考与练习 315
11.10 练一练 316
第12章 触发器与存储过程编程 317
12.1 触发器简介 318
12.1.1 触发器的定义 318
12.1.2 触发器的类型 319
12.2 创建触发器 319
12.2.1 创建触发器的语法 319
12.2.2 DML触发器 320
12.2.3 DDL触发器 324
12.2.4 INSTEAD OF触发器 325
12.2.5 事件触发器 327
12.3 操作触发器 330
12.3.1 查看触发器信息 330
12.3.2 改变触发器的状态 330
12.3.3 删除触发器 331
12.4 实践案例:为主键自动赋值 331
12.5 存储过程 332
12.5.1 创建存储过程的语法 333
12.5.2 调用存储过程 333
12.6 操作存储过程 334
12.6.1 查看存储过程的定义信息 334
12.6.2 修改存储过程 334
12.6.3 删除过程 335
12.7 存储过程参数 335
12.7.1 IN参数 335
12.7.2 OUT参数 337
12.7.3 包含IN和OUT参数 338
12.7.4 参数的默认值 339
12.8 思考与练习 340
12.9 练一练 341
第13章 其他Oracle模式对象 343
13.1 临时表 344
13.1.1 临时表的类型 344
13.1.2 创建临时表 344
13.1.3 使用临时表 345
13.1.4 删除临时表 346
13.2 分区表 347
13.2.1 分区表简介 347
13.2.2 列表分区 348
13.2.3 范围分区 349
13.2.4 哈希分区 351
13.2.5 复合分区 351
13.2.6 增加分区表 352
13.2.7 合并分区表 354
13.2.8 删除分区表 355
13.2.9 创建分区表索引 355
13.3 簇表 357
13.3.1 创建簇 357
13.3.2 创建簇表 357
13.3.3 创建簇索引 358
13.3.4 修改簇 358
13.3.5 删除簇 359
13.4 序列 359
13.4.1 创建序列 359
13.4.2 修改序列 361
13.4.3 删除序列 362
13.5 索引 362
13.5.1 了解Oracle中的索引类型 362
13.5.2 索引创建语法 365
13.5.3 创建B树索引 366
13.5.4 创建位图索引 367
13.5.5 创建反向键索引 368
13.5.6 创建基于函数的索引 368
13.5.7 管理索引 369
13.6 思考与练习 372
13.7 练一练 373
第14章 酒店客房管理系统数据库 375
14.1 系统需求分析 376
14.1.1 系统简介 376
14.1.2 功能要求 376
14.2 具体化需求 377
14.2.1 绘制业务流程图 377
14.2.2 绘制数据流图 379
14.3 系统建模 385
14.3.1 绘制E-R图 385
14.3.2 将E-R图转换为关系模型 387
14.4 系统设计 388
14.4.1 创建表空间和用户 388
14.4.2 创建数据表 389
14.4.3 创建视图 392
14.4.4 创建存储过程 393
14.4.5 创建触发器 399
14.5 模拟业务逻辑测试 402
14.5.1 测试视图 403
14.5.2 测试存储过程 404
14.5.3 测试触发器 407
14.6 导出和导入数据 411
14.6.1 导出数据 411
14.6.2 导入数据 412
附录 习题答案 413