第一部分 SQL概念综述 3
第1章 欢迎来到SQL世界 3
1.1 SQL定义及历史 3
1.1.1什么是SQL 4
1.1.2什么是ANSI SQL 4
1.1.3新标准:SQL-2003 4
1.1.4什么是数据库 5
1.1.5关系型数据库 5
1.1.6客户端/服务器技术 6
1.1.7基于Web的数据库系统 7
1.1.8主流数据库厂商 7
1.2 SQL会话 8
1.2.1 CONNECT 8
1.2.2 DISCONNECT和EXIT 8
1.3 SQL命令的类型 8
1.3.1定义数据库结构 9
1.3.2操作数据 9
1.3.3选择数据 9
1.3.4数据控制语言 9
1.3.5数据管理命令 10
1.3.6事务控制命令 10
1.4本书使用的数据库 10
1.4.1表命名标准 11
1.4.2数据一瞥 11
1.4.3表的构成 12
1.4.4 MySQL范例和练习 14
1.5小结 14
1.6问与答 14
1.7实践 15
1.7.1测验 15
1.7.2练习 15
第二部分 建立数据库 19
第2章 定义数据结构 19
2.1数据是什么 19
2.2基本数据类型 19
2.2.1定长字符串 20
2.2.2变长字符串 20
2.2.3大对象类型 21
2.2.4数值类型 21
2.2.5小数类型 22
2.2.6整数 22
2.2.7浮点数 23
2.2.8日期和时间类型 23
2.2.9直义字符串 23
2.2.10 NULL数据类型 24
2.2.11布尔值 24
2.2.12自定义类型 24
2.2.13域 25
2.3小结 25
2.4问与答 26
2.5实践 26
2.5.1测验 26
2.5.2练习 27
第3章 管理数据库对象 29
3.1什么是数据库对象 29
3.2什么是规划 29
3.3表:数据的主要存储方式 31
3.3.1列 31
3.3.2行 32
3.3.3 CREATE TABLE语句 32
3.3.4命名规范 33
3.3.5 ALTER TABLE命令 33
3.3.6从现有表新建另一个表 35
3.3.7删除表 36
3.4完整性约束 36
3.4.1主键约束 36
3.4.2惟一性约束 37
3.4.3外键约束 38
3.4.4 NOT NULL约束 38
3.4.5检查约束 39
3.4.6去除约束 39
3.5小结 40
3.6问与答 40
3.7实践 40
3.7.1测验 41
3.7.2练习 41
第4章 规格化过程 42
4.1规格化数据库 42
4.1.1原始数据库 42
4.1.2数据库逻辑设计 43
4.1.3规格形式 44
4.1.4命名规范 46
4.1.5规格化的优点 47
4.1.6规格化的缺点 47
4.2去规格化数据库 48
4.3小结 48
4.4问与答 48
4.5实践 49
4.5.1测验 49
4.5.2练习 49
第5章 操作数据 51
5.1数据操作概述 51
5.2用新数据填充表 51
5.2.1把数据插入到表 52
5.2.2给表里指定列插入数据 53
5.2.3从另一个表插入数据 53
5.2.4插入NULL值 55
5.3更新现有数据 55
5.3.1更新一列的数据 55
5.3.2更新一条或多记录里的多个字段 56
5.4从表里删除数据 56
5.5小结 57
5.6问与答 57
5.7实践 58
5.7.1测验 58
5.7.2练习 59
第6章 管理数据库事务 60
6.1什么是事务 60
6.2控制事务 61
6.2.1 COMMIT命令 61
6.2.2 ROLLBACK命令 62
6.2.3 SAVEPOINT命令 63
6.2.4 ROLLBACK TO SAVEPOINT命令 64
6.2.5 RELEASE SAVEPOINT命令 65
6.2.6 SET TRANSACTION命令 65
6.3事务控制与数据库性能 65
6.4小结 66
6.5问与答 66
6.6实践 66
6.6.1测验 66
6.6.2练习 67
第三部分 从查询中获得有效的结果 71
第7章 数据库查询 71
7.1什么是查询 71
7.2 SELECT语句 71
7.2.1 SELECT语句 72
7.2.2 FROM子句 73
7.2.3 WHERE子句 74
7.2.4 ORDER BY子句 75
7.2.5大小写敏感性 76
7.3简单查询的范例 77
7.3.1统计表里的记录数量 78
7.3.2从另一个用户表里选择数据 78
7.3.3使用字段别名 79
7.4小结 79
7.5问与答 79
7.6实践 80
7.6.1 测验 80
7.6.2练习 80
第8章 使用操作符对数据进行分类 82
8.1什么是SQL里的操作符 82
8.2比较操作符 82
8.2.1相等 83
8.2.2不等于 83
8.2.3小于和大于 84
8.2.4比较操作符的组合 84
8.3逻辑操作符 85
8.3.1 IS NULL 85
8.3.2 BETWEEN 86
8.3.3 IN 86
8.3.4 LIKE 87
8.3.5 EXISTS 88
8.3.6 ALL、SOME和ANY操作符 88
8.4连接操作符 89
8.4.1 AND 90
8.4.2 OR 90
8.5求反操作符 92
8.5.1不相等 92
8.5.2 NOT BETWEEN 92
8.5.3 NOT IN 93
8.5.4 NOT LIKE 93
8.5.5 IS NOT NULL 94
8.5.6 NOT EXISTS 94
8.6算术操作符 94
8.6.1加法 95
8.6.2减法 95
8.6.3乘法 95
8.6.4除法 96
8.6.5算术操作符的组合 96
8.7小结 97
8.8问与答 97
8.9实践 97
8.9.1测验 97
8.9.2练习 98
第9章 汇总查询得到的数据 100
9.1什么是汇总函数 100
9.1.1 COUNT函数 101
9.1.2 SUM函数 103
9.1.3 AVG函数 103
9.1.4 MAX函数 104
9.1.5 MIN函数 105
9.2小结 105
9.3问与答 106
9.4实践 106
9.4.1 测验 106
9.4.2练习 107
第10章 数据排序与分组 108
10.1为什么要对数据进行分组 108
10.2 GROUP BY子句 109
10.2.1分组函数 109
10.2.2对选中的数据进行分组 109
10.2.3创建分组和使用汇总函数 109
10.2.4以整数代表字段名称 112
10.3 GROUP BY与ORDER BY 112
10.4 HAVING子句 114
10.5小结 115
10.6问与答 115
10.7实践 115
10.7.1测验 115
10.7.2练习 116
第11章 调整数据的外观 117
11.1 ANSI字符函数 117
11.1.1串接 117
11.1.2子串 118
11.1.3 TRANSLATE 118
11.2常用字符函数 118
11.2.1串接 118
11.2.2 TRANSLATE 119
11.2.3 REPLACE 120
11.2.4 UPPER 120
11.2.5 LOWER 120
11.2.6 SUBSTR 121
11.2.7 INSTR 122
11.2.8 LTRIM 122
11.2.9 RTRIM 123
11.2.10 DECODE 123
11.3其他字符函数 124
11.3.1 LENGTH 124
11.3.2 IFNULL(检查NULL值) 124
11.3.3 COALESCE 125
11.3.4 LPAD 125
11.3.5 RPAD 126
11.3.6 ASCII 126
11.4算术函数 126
11.5转换函数 127
11.5.1字符串转换为数字 127
11.5.2数字转换为字符串 128
11.6字符函数的组合使用 128
11.7小结 129
11.8问与答 129
11.9实践 130
11.9.1测验 130
11.9.2练习 130
第12章 日期和时间 132
12.1日期是如何存储的 132
12.1.1日期和时间的标准数据类型 132
12.1.2 DATETIME元素 133
12.1.3不同实现的日期类型 133
12.2日期函数 134
12.2.1当前日期 134
12.2.2时区 134
12.2.3时间与日期相加 135
12.2.4比较日期和时间间隔 136
12.2.5其他日期函数 137
12.3日期转换 137
12.3.1日期描述 138
12.3.2日期转换为字符串 140
12.3.3字符串转换为日期 140
12.4小结 141
12.5问与答 141
12.6实践 141
12.6.1测验 141
12.6.2练习 141
第四部分 建立复杂的数据库查询 145
第13章 在查询里结合表 145
13.1从多个表获取数据 145
13.2结合的类型 146
13.2.1结合条件的位置 146
13.2.2等值结合 146
13.2.3自然结合 147
13.2.4 使用表的别名 148
13.2.5不等值结合 149
13.2.6外部结合 150
13.2.7自结合 151
13.2.8结合多个主键 152
13.3需要考虑的事项 153
13.3.1使用基表 153
13.3.2笛卡尔积 154
13.4小结 155
13.5问与答 156
13.6实践 156
13.6.1测验 156
13.6.2练习 157
第14章 使用子查询定义未确定数据 158
14.1什么是子查询 158
14.1.1子查询与SELECT语句 159
14.1.2子查询与INSERT语句 160
14.1.3子查询与UPDATE语句 161
14.1.4子查询与DELETE语句 162
14.2嵌套的子查询 162
14.3关联子查询 164
14.4小结 164
14.5问与答 165
14.6实践 165
14.6.1测验 165
14.6.2练习 166
第15章 组合多个查询 168
15.1单查询与组合查询 168
15.2组合查询操作符 169
15.2.1 UNION 169
15.2.2 UNIONALL 171
15.2.3 INTERSECT 172
15.2.4 EXCEPT 172
15.3组合查询里使用ORDER BY 173
15.4组合查询里使用GROUP BY 174
15.5获取准确的数据 175
15.6小结 176
15.7问与答 176
15.8实践 176
15.8.1测验 177
15.8.2练习 178
第五部分 SQL性能调整 181
第16章 利用索引改善性能 181
16.1什么是索引 181
16.2索引是如何工作的 182
16.3 CREATE INDEX命令 182
16.4索引的类型 183
16.4.1单字段索引 183
16.4.2惟一索引 183
16.4.3组合索引 184
16.4.4隐含索引 184
16.5何时考虑使用索引 184
16.6何时应该避免使用索引 185
16.7删除索引 186
16.8小结 186
16.9问与答 186
16.10实践 187
16.10.1 测验 187
16.10.2练习 187
第17章 改善数据库性能 188
17.1什么是SQL语句调整 188
17.2数据库调整与SQL语句调整 189
17.3格式化SQL语句 189
17.3.1为提高可读性格式化SQL语句 189
17.3.2 FROM子句里的表 191
17.3.3结合条件的次序 191
17.3.4最严格条件 191
17.4全表扫描 192
17.5其他性能考虑 193
17.5.1使用LIKE操作符和通配符 193
17.5.2避免使用OR操作符 194
17.5.3避免使用HAVING子句 195
17.5.4避免大规模排序操作 195
17.5.5使用存储过程 195
17.5.6在批加载时关闭索引 195
17.6性能工具 196
17.7小结 196
17.8问与答 196
17.9实践 197
17.9.1测验 197
17.9.2练习 197
第六部分 使用SQL管理用户和安全 201
第18章 管理数据库用户 201
18.1用户就是原因 202
18.1.1用户的类型 202
18.1.2谁管理用户 202
18.1.3用户在数据库里的位置 203
18.1.4不同规划里的用户 203
18.2管理过程 203
18.2.1创建用户 204
18.2.2创建规划 205
18.2.3删除规划 206
18.2.4调整用户 207
18.2.5用户会话 207
18.2.6禁止用户访问 208
18.3数据库用户使用的工具 208
18.4小结 208
18.5问与答 209
18.6实践 209
18.6.1测验 209
18.6.2练习 209
第19章 管理数据库安全 211
19.1什么是数据库安全 211
19.2什么是权限 212
19.2.1系统权限 212
19.2.2对象权限 213
19.2.3谁负责授予和撤消权限 214
19.3控制用户访问 214
19.3.1 GRANT命令 215
19.3.2 REVOKE命令 216
19.3.3控制对单独字段的访问 216
19.3.4数据库账户PUBLIC 216
19.3.5权限组 217
19.4通过角色控制权限 217
19.4.1 CREATE ROLE语句 218
19.4.2 DROP ROLE语句 218
19.4.3 SET ROLE语句 218
19.5小结 218
19.6问与答 219
19.7实践 219
19.7.1测验 219
19.7.2练习 220
第七部分 摘要数据结构 223
第20章 创建和使用视图及异名 223
20.1什么是视图 223
20.1.1使用视图来简化数据访问 224
20.1.2使用视图作为一种安全形式 224
20.1.3使用视图维护摘要数据 225
20.2创建视图 225
20.2.1从一个表创建视图 225
20.2.2从多个表创建视图 227
20.2.3从视图创建视图 227
20.3 WITH CHECK OPTION 228
20.4通过视图更新数据 229
20.4.1在视图里插入记录 229
20.4.2从视图里删除记录 229
20.5从视图创建表 229
20.6视图与ORDER BY子句 230
20.7删除视图 230
20.8什么是异名 231
20.8.1创建异名 231
20.8.2删除异名 232
20.9小结 232
20.10问与答 232
20.11实践 233
20.11.1 测验 233
20.11.2练习 233
第21章 使用系统目录 234
21.1什么是系统目录 234
21.2如何创建系统目录 235
21.3系统目录里包含什么内容 235
21.3.1用户数据 236
21.3.2安全信息 236
21.3.3数据库设计信息 236
21.3.4性能统计 236
21.4不同实现里的系统目录表格 237
21.5查询系统目录 238
21.6更新系统目录对象 239
21.7小结 240
21.8问与答 240
21.9实践 241
21.9.1测验 241
21.9.2练习 241
第八部分 在实际工作中应用SQL知识 245
第22章 高级SQL主题 245
22.1光标 245
22.1.1打开光标 246
22.1.2从光标获取数据 246
22.1.3关闭光标 247
22.2存储过程和函数 247
22.3触发器 249
22.3.1 CREATE TRIGGER语句 249
22.3.2 DROP TRIGGER语句 250
22.3.3 FOR EACH ROW语句 251
22.4动态SQL 251
22.5调用级接口 251
22.6使用SQL生成SQL 252
22.7直接SQL与嵌入SQL 252
22.8窗口表格函数 253
22.9使用XML 253
22.10小结 253
22.11问与答 254
22.12实践 254
22.12.1测验 254
22.12.2练习 255
第23章 SQL扩展到企业、互联网和内部网 256
23.1 SQL与企业 256
23.1.1后台程序 256
23.1.2前台程序 257
23.2访问远程数据库 258
23.2.1 ODBC 258
23.2.2 JDBC 258
23.2.3厂商连接产品 259
23.2.4通过Web接口访问远程数据库 259
23.3 SQL与互联网 260
23.3.1让数据可以被全世界的顾客使用 260
23.3.2向雇员和授权顾客提供数据 260
23.3.3使用SQL的前台Web工具 260
23.4 SQL与内部网 260
23.5小结 261
23.6问与答 261
23.7实践 261
23.7.1测验 262
23.7.2练习 262
第24章 标准SQL的扩展 263
24.1各种实现 263
24.1.1不同实现之间的区别 263
24.1.2遵循ANSI SQL 264
24.1.3 SQL的扩展 265
24.2扩展范例 265
24.2.1 Transact-SQL 266
24.2.2 PL/SQL 266
24.2.3 MySQL 267
24.3交互SQL语句 267
24.4小结 268
24.5问与答 268
24.6实践 269
24.6.1测验 269
24.6.2练习 269
第九部分 附录 273
附录A 常用SQL命令 273
A.1 SQL语句 273
A.2 SQL子句 276
附录B 使用MySQL进行练习 278
B.1 Windows安装指令 278
B.2 Linux安装指令 279
附录C 测验和练习的答案 280
附录D 本书范例的CREATE TABLE语句 314
D.1 EMPLOYEE_TBL 314
D.2 EMPLOYEE_PAY_TBL 314
D.3 CUSTOMER_TBL 314
D.4 ORDERS_TBL 315
D.5 PRODUCTS_TBL 315
附录E 书中范例的INSERT语句 316
E.1 EMPLOYEE_TBL 316
E.2 EMPLOYEE_PAY_TBL 316
E.3 CUSTOMER_TBL 317
E.4 ORDERS_TBL 318
E.5 PRODUCTS_TBL 318
附录F 额外练习 320
术语表 325