第1章 背景知识 1
1.1 数据库简介 1
1.1.1 非关系数据库 2
1.1.2 关系模型 3
1.1.3 一些术语 5
1.2 什么是SQL 6
1.2.1 SQL语句的分类 6
1.2.2 SQL:非过程化语句 7
1.2.3 SQL示例 9
1.3 什么是MySQL 11
1.4 内容前瞻 11
第2章 创建和使用数据库 13
2.1 创建MySQL数据库 13
2.2 使用mysql命令行工具 15
2.3 MySQL数据类型 16
2.3.1 字符型数据 16
2.3.2 数值型数据 18
2.3.3 时间数据 20
2.4 表的创建 22
2.4.1 第1步:设计 22
2.4.2 第2步:精化 22
2.4.3 第3步:构建SQL方案语句 24
2.5 操作与修改表 27
2.5.1 插入数据 27
2.5.2 更新数据 31
2.5.3 删除数据 32
2.6 导致错误的语句 32
2.6.1 主键不唯一 32
2.6.2 不存在的外键 32
2.6.3 列值不合法 33
2.6.4 无效的日期转换 33
2.7 Bank方案 34
第3章 查询入门 37
3.1 查询机制 37
3.2 查询语句 39
3.3 select子句 39
3.3.1 列的别名&. 42
3.3.2 去除重复的行 43
3.4 from子句 44
3.4.1 表的概念 44
3.4.2 表连接 46
3.4.3 定义表别名 47
3.5 where子句 48
3.6 group by和having子句 50
3.7 order by子句 51
3.7.1 升序或降序排序 53
3.7.2 根据表达式排序 54
3.7.3 根据数字占位符排序 55
3.8 小测验 55
第4章 过滤 57
4.1 条件评估 57
4.1.1 使用圆括号 58
4.1.2 使用not操作符 59
4.2 构建条件 60
4.3 条件类型 60
4.3.1 相等条件 60
4.3.2 范围条件 62
4.3.3 成员条件 65
4.3.4 匹配条件 67
4.4 null:4个字母的关键字 70
4.5 小测验 73
第5章 多表查询 75
5.1 什么是连接 75
5.1.1 笛卡儿积 76
5.1.2 内连接 77
5.1.3 ANSI连接语法 80
5.2 连接3个或更多的表 82
5.2.1 将子查询结果作为查询表 84
5.2.2 连续两次使用同一个表 86
5.3 自连接 87
5.4 相等连接和不等连接 88
5.5 连接条件和过滤条件 90
5.6 小测验 91
第6章 使用集合 93
6.1 集合理论基础 93
6.2 集合理论实践 95
6.3 集合操作符 97
6.3.1 union操作符 97
6.3.2 intersect操作符 99
6.3.3 except操作符 100
6.4 集合操作规则 102
6.4.1 对复合查询结果排序 102
6.4.2 集合操作符优先级 103
6.5 小测验 105
第7章 数据生成、转换和操作 107
7.1 使用字符串数据 107
7.1.1 生成字符串 108
7.1.2 操作字符串 112
7.2 使用数值数据 118
7.2.1 执行算术函数 119
7.2.2 控制数字精度 120
7.2.3 处理有符号数 122
7.3 使用时间数据 123
7.3.1 处理时区 123
7.3.2 生成时间数据 125
7.3.3 操作时间数据 129
7.4 转换函数 133
7.5 小测验 134
第8章 分组与聚集 135
8.1 分组概念 135
8.2 聚集函数 137
8.2.1 隐式或显式分组 138
8.2.2 对独立值计数 139
8.2.3 使用表达式 141
8.2.4 如何处理null值 141
8.3 产生分组 142
8.3.1 对单列的分组 143
8.3.2 对多列的分组 143
8.3.3 利用表达式分组 144
8.3.4 产生合计数 144
8.4 分组过滤条件 146
8.5 小测验 148
第9章 子查询 149
9.1 什么是子查询 149
9.2 子查询类型 150
9.3 非关联子查询 150
9.3.1 多行单列子查询 152
9.3.2 多列子查询 157
9.4 关联子查询 159
9.4.1 exists运算符 161
9.4.2 关联子查询操作数据 162
9.5 何时使用子查询 163
9.5.1 子查询作为数据源 163
9.5.2 过滤条件中的子查询 168
9.5.3 子查询作为表达式生成器 169
9.6 子查询总结 172
9.7 小测验 173
第10章 再谈连接 174
10.1 外连接 174
10.1.1 左外连接与右外连接 178
10.1.2 三路外连接 179
10.1.3 自外连接 181
10.2 交叉连接 184
10.3 自然连接 190
10.4 小测验 192
第11章 条件逻辑 194
11.1 什么是条件逻辑 194
11.2 case表达式 196
11.2.1 查找型case表达式 196
11.2.2 简单case表达式 198
11.3 case表达式范例 199
11.3.1 结果集变换 199
11.3.2 选择性聚合 200
11.3.3 存在性检查 202
11.3.4 除零错误 203
11.3.5 有条件更新 205
11.3.6 null值处理 205
11.4 小测验 206
第12章 事务 208
12.1 多用户数据库 208
12.1.1 锁 208
12.1.2 锁的粒度 209
12.2 什么是事务 209
12.2.1 启动事务 211
12.2.2 结束事务 212
12.2.3 事务保存点 213
12.3 小测验 215
第13章 索引和约束 216
13.1 索引 216
13.1.1 创建索引 217
13.1.2 索引类型 220
13.1.3 如何使用索引 222
13.1.4 索引的不足 224
13.2 约束 225
13.2.1 创建约束 226
13.2.2 约束与索引 227
13.2.3 级联约束 227
13.3 小测验 230
第14章 视图 231
14.1 什么是视图 231
14.2 为什么使用视图 234
14.2.1 数据安全 234
14.2.2 数据聚合 235
14.2.3 隐藏复杂性 236
14.2.4 连接分区数据 236
14.3 可更新的视图 237
14.3.1 更新简单视图 238
14.3.2 更新复杂视图 239
14.4 小测验 241
第15章 元数据 242
15.1 关于数据的数据 242
15.2 信息模式 243
15.3 使用元数据 248
15.3.1 模式生成脚本 248
15.3.2 部署验证 251
15.3.3 生成动态SQL 251
15.4 小测验 255
附录A 示例数据库的ER图 256
附录B MySQL对SQL语言的扩展 258
B.1 扩展select语句 258
B.1.1 limit子句 258
B.1.2 into outfile子句 261
B.2 组合insert/update语句 263
B.3 按排序更新和删除 265
B.4 多表更新与删除 266
附录C 练习答案 270