目录 1
第1章 关系数据库设计 1
1.1 SQL简史及功能特性 1
1.1.1 SQL简史 1
1.1.2 SQL的功能与特性 2
1.1.3 SQL3简介 4
1.2 关系数据模型 6
1.2.1 数据结构 6
1.2.2 键与外部键 7
1.3 关系操作 8
1.3.1 选择 9
1.3.2 投影 9
1.3.3 连接 10
1.4 数据库设计概述 12
1.4.1 数据库模型准则 12
1.4.2 数据库设计过程 14
1.5 概念数据库设计 15
1.5.2 实体 16
1.5.1 概述 16
1.5.3 属性 17
1.5.4 一对一关系 19
1.5.5 一对多关系 19
1.5.6 多对多关系 20
1.5.7 E-R图的绘制 20
1.5.8 回顾 21
1.6.1 将实体和关系转化为关系模式 22
1.6 逻辑数据库设计 22
1.6.2 函数依赖 26
1.6.3 无损分解 27
1.6.4 规范化准则 28
1.6.5 回顾 32
1.7 完整性 33
1.7.1 域约束 33
1.7.3 关联完整性约束 34
1.7.2 实体完整性约束 34
1.9 回顾数据库设计 35
1.8 数据库设计的其他问题 35
1.10 小结 36
1.11 上机练习 37
1.12 习题 37
第2章 SQL基础 38
2.1 名字 38
2.1.1 表名 38
2.1.2 列名 39
2.2 数据类型 40
2.2.1 数字数据类型 40
2.2.2 字符串数据类型 41
2.2.3 时间数据类型 42
2.3.1 数字常量 43
2.3.2 字符串常量 43
2.3 常量 43
2.3.3 时间和日期常量 44
2.3.4 符号常量 44
2.4 语句 45
2.4.1 语句的分类 45
2.4.2 语句的规则 46
2.5 表达式 48
2.6 内嵌函数 50
2.7 NULL 51
2.8 小结 52
2.9 上机练习 53
2.10 习题 53
第3章 创建数据库 54
3.1 创建数据库 54
3.2 创建表 55
3.3 列约束 56
3.3.1 候选键和主键约束 56
3.3.2 外部键约束 59
3.3.3 NULL与NOT NULL约束 60
3.3.4 校验约束 61
3.3.5 默认值(DEFAULT) 63
3.4 Company数据库中表的创建 64
3.5 创建索引 67
3.5.1 使用索引的原因 67
3.5.2 创建索引 68
3.5.3 群集索引 70
3.6 修改数据库和对象 71
3.6.1 修改数据库 71
3.6.2 修改表定义 71
3.7 删除数据库和对象 74
3.7.1 删除数据库 74
3.7.2 删除表 74
3.7.3 删除索引 74
3.9 上机练习 75
3.8 小结 75
3.10 习题 76
第4章 更新数据库 77
4.1 添加新的记录 77
4.1.1 使用INSERT…VALUES语句添加记录 77
4.1.2 使用INSERT…SELECT语句添加记录 80
4.2 修改记录 82
4.2.1 指定更新的列和新值 83
4.2.2 指定更新的条件 84
4.3 删除记录 85
4.4 小结 87
4.5 上机练习 87
4.6 习题 88
第5章 数据库数据的选择 89
5.1 SELECT语句解析 89
5.2 指定要检索的列 90
5.2.1 选择所有的列 90
5.2.2 选择所需的列 92
5.2.3 表达式的使用 93
5.2.4 别名的使用 98
5.3 指定要检索的表 100
5.4 使用WHERE子句进行筛选 101
5.4.1 比较运算符 102
5.4.2 逻辑运算符 105
5.4.3 IN子句 112
5.4.4 限制范围:BETWEEN子句 114
5.4.5 匹配字符串:LIKE子句 117
5.4.6 等号、IN、LIKE三者的比较 121
5.4.7 空值的处理 123
5.4.8 WHERE子句中有用的函数 127
5.5 小结 129
5.6 上机练习 130
5.7 习题 130
6.1.1 ORDER BY的使用 131
6.1 排序数据 131
第6章 数据的排序、聚集和分组 131
6.1.2 升序排序和降序排序 133
6.1.3 使用表达式排序 135
6.1.4 多级排序 138
6.1.5 空值的处理 140
6.2 聚集数据 142
6.2.1 去除相同行:DISTINCT 142
6.2.2 聚集函数 145
6.2.3 避免使用DISTINCT时的错误 155
6.3 对数据分组 159
6.3.1 GROUP BY子句 159
6.3.2 多次分组 163
6.3.3 与ORDER BY一起使用 166
6.3.4 HAVING子句 169
6.3.5 空值的处理 173
6.3.6 避免分组时的错误 177
6.6 习题 178
6.4 小结 178
6.5 上机练习 178
第7章 多表连接查询 180
7.1 什么是连接 180
7.1.1 传统的连接语法 180
7.1.2 SQL连接语法 181
7.2 使用连接的原因 184
7.3 如何处理连接 184
7.3.1 笛卡尔积 186
7.3.2 连接中运算符的使用 188
7.3.3 多表连接 190
7.3.4 连接结果的处理 193
7.3.5 连接的处理步骤 199
7.4 连接的类型 199
7.4.1 一般的连接 199
7.4.2 自然连接 200
7.4.3 自连接 201
7.4.4 外连接 203
7.5 对集合的支持 208
7.5.1 UNON运算 208
7.5.2 INTERSECT运算 214
7.5.3 MINUS运算 215
7.6 小结 216
7.7 上机练习 216
7.8 习题 216
第8章 子查询 218
8.1 什么是子查询 218
8.2 子查询与连接 220
8.3 子查询的类型 223
8.3.1 无关子查询 223
8.3.2 相关子查询 224
8.4 子查询的规则 226
8.5.1 IN的使用 227
8.5 返回多个值的子查询 227
8.5.2 NOT IN的使用 228
8.5.3 IN与相关子查询的联合使用 230
8.5.4 交集和差集的查询:EXISTS 232
8.5.5 空集的查询:NOT EXISTS 234
8.5.6 EXISTS的替代方法 234
8.5.7 ANY的使用 236
8.5.8 ALL的使用 237
8.6 返回单个值的子查询 238
8.6.1 比较运算符和相关子查询 240
8.6.2 聚集函数和子查询 241
8.6.3 返回单个值的GROUP BY和HAVING子句 243
8.7 子查询的嵌套 244
8.7.1 嵌套子查询 244
8.7.2 子查询与连接结合 246
8.7.3 在HAVING子句中使用子查询 247
8.7.4 在UPDATE,DELETE和INSERT中使用子查询 248
8.7.5 在FROM中使用子查询 254
8.8 小结 255
8.9 上机练习 256
8.10 习题 256
第9章 视图的使用 257
9.1 什么是视图 257
9.2 视图的处理过程 258
9.3.1 视图的优点 260
9.3 视图的优缺点 260
9.3.2 视图的缺点 261
9.4 创建视图 261
9.4.1 创建列的别名 264
9.4.2 单表视图 266
9.4.3 使用连接的视图 268
9.4.4 使用子查询的视图 272
9.5 更新视图 273
9.7 视图的应用 280
9.7.1 简化复杂的查询 280
9.6 删除视图 280
9.7.2 从多个数据源汇总数据 282
9.7.3 单位转换 283
9.7.4 保障安全性 284
9.8 小结 285
9.9 上机练习 285
9.10 习题 285
第10章 具体数据类型的处理 287
10.1 概述 287
10.2 数字 289
10.2.1 算术运算和数学函数 289
10.2.2 对数字排序 292
10.2.3 处理空值 293
10.2.4 格式化数字 295
10.3 字符串 297
10.3.1 字符串函数 297
10.3.2 字符串运算 302
10.3.3 子字符串 304
10.4 时间 306
10.4.1 日期时间的存储和显示 306
10.4.2 日期时间函数 308
10.4.3 日期时间的算法 312
10.5 类型转换 314
10.6 小结 316
10.7 上机练习 316
10.8 习题 317
第11章 数据库性能和SQL优化 318
11.1 数据库性能 318
11.1.1 影响数据库性能的因素 319
11.1.2 基准测试 319
11.1.3 监控和提高性能的工具 320
11.2 提高SQL语句的可读性 322
11.3 避免扫描整个表 323
11.4 增加一个新的索引 324
11.5 查询优化 326
11.5.1 查询优化器 327
11.5.2 编写高性能的SQL语句 327
11.5.3 提高系统性能的方法 330
11.6 小结 332
11.7 上机练习 332
11.8 习题 333
第12章 SQL的安全性 334
12.1 SQL安全概述 334
12.1.1 用户 335
12.1.2 数据库元素 336
12.1.3 SQL-3标准的新元素 339
12.1.4 权限 343
12.2 使用GRANT和REVOKE 344
12.2.1 使用GRANT授予权限或角色 344
12.2.2 使用REVOKE撤销权限 350
12.3 视图与SQL安全性 353
12.4 小结 355
12.5 上机练习 356
12.6 习题 356
第13章 事务、游标及存储过程 357
13.1 事务 357
13.1.1 并行控制 357
13.1.2 数据库恢复 358
13.1.4 工作过程 359
13.1.3 用户定义事务 359
13.2 游标 361
13.3 存储过程 363
13.4 小结 364
13.5 上机练习 365
13.6 习题 365
附录A 本书中使用的数据库样例 366
附录B 本书创建的视图样例 376
附录C SQL语句的调试 393