前言 1
第一部分 SQL概念综述 1
第1章 欢迎学习SQL 1
1.1 SQL定义和历史 1
1.1.1 什么是SQL 1
1.1.2 什么是ANSI SQL 2
1.1.3 什么是数据库? 2
1.1.4 关系型数据库简介 2
1.1.5 客户机/服务器技术简介 3
1.1.6 一些流行的关系型数据库供应商 4
1.2 SQL命令的种类 4
1.2.5 数据管理命令 5
1.2.4 数据控制语言(DCL) 5
1.2.3 选择数据(DQL) 5
1.2.2 操纵数据(DML) 5
1.2.6 事务性控制命令 6
1.3 在本书中使用的数据库简介 6
1.3.1 本书的表图 6
1.3.2 表命名标准 7
1.3.3 观察数据 7
1.3.4 仔细观察表的结构 9
1.4 小结 10
1.5 问与答 11
1.6 自习 11
1.6.1 测验 11
1.6.2 练习 11
2.2 基本数据类型 13
2.1 数据是什么? 13
第二部分 建立数据库 13
第2章 定义数据结构 13
2.2.1 定长字符串 14
2.2.2 变长字符串 14
2.2.3 数字值 14
2.2.4 小数点数值 15
2.2.5 整型 15
2.2.6 浮点小数 16
2.2.7 日期和时间 16
2.2.8 文字串 16
2.3 小结 17
2.4 问与答 17
2.5.2 练习 18
2.5.1 测验 18
2.5 自习 18
第3章 管理数据库对象 20
3.1 什么是数据库对象? 20
3.2 什么是模式? 20
3.3 表:数据的主要存储器 21
3.3.1 字段和列 22
3.3.2 行 22
3.3.3 CREATE TABLE语句 22
3.3.4 命名约定 24
3.3.5 ALTER TABLE命令 24
3.3.6 从现有表中创建一表 25
3.4 完整性约束 27
3.4.1 主键约束 27
3.3.7 删除表 27
3.4.2 一性约束 28
3.4.3 外键约束 28
3.4.4 NOT NULL约束 29
3.4.5 使用Check约束 30
3.5 小结 30
第4 章 规范化过程 33
4.1 将数据库规范化 33
4.1.1 数据库原材料 33
4.1.2 逻辑数据库设计 34
4.1.3 规范形式 34
4.1.4 命名约定 35
4.1.7 数据库的非规范化 37
4.1.6规范化的弊端 37
4.1.5 规范化的好处 37
4.2 小结 38
4.3 问与答 38
4.4 自习 38
4.4.1 测验 38
4.4.2 练习 39
第5章 操纵数据 40
5.1 数据操纵综述 40
5.2 给表填充新数据 40
5.2.1 往表中插入新数据 40
5.2.2 往表中有限列中插入数据 41
5.2.3 插入另外一张表中的数据 42
5.2.4 插入NULL值 44
5.3.1 只更新单独一列的数值 45
5.3 更新已存在的数据 45
5.3.2 在一行或多行记录中更新多个列 46
5.4 从表中删除数据 47
5.5小结 47
5.7.1测验 48
5.7.2练习 49
第6章 数据库事务管理 50
6.1 什么是事务 50
6.2 什么是事务控制? 50
6.2.1 COMMIT命令 51
6.2.2 ROLLBACK命令 52
6.2.3 SAVEPOINT命令 54
6.3 事务控制和数据库的性能 55
6.6.1 测验 56
6.6.2 练习 56
6.5 问与答 56
6.6 自习 56
6.4 小结 56
第三部分 用查询创建有效的结果集 59
第7章 数据库查询介绍 59
7.1 什么是查询 59
7.2 SELECT语句介绍 59
7.2.1 SELECT语句 59
7.2.2 FROM子句 62
7.2.3 使用条件来区分数据 62
7.2.4 输出排序 64
7.2.5 区分大小写 66
7.3 简单查询的例子 67
7.3.1 统计表中的记录数 68
7.3.3 列的别名 69
7.3.2 从其他用户表中选择数据 69
7.4 小结 70
7.5 问与答 70
7.6 自习 70
7.6.1 测验 70
7.6.2 练习 70
第8章 使用操作符来给数据分类 72
8.1 在SQL中什么是操作符 72
8.2 比较操作符 72
8.2.1 相等性 72
8.2.2 不等性 73
8.2.3 小于,大于 74
8.2.4 比较操作符的组合操作实例 75
8.3 逻辑操作符 76
8.3.1 IS NULL 76
8.3.2 BETWEEN 77
8.3.3 IN 77
8.3.4 LIKE 78
8.3.5 EXISTS 79
8.3.6 UNIQUE 80
8.3.7 ALL和ANY操作符 80
8.4 连接符 82
8.4.1 AND 82
8.4.2 OR 83
8.5 NOT操作符求逆条作 84
8.5.1 不等性 84
8.5.3 NOT IN 85
8.5.2 NOT BETWEEN 85
8.5.4 NOT LIKE 86
8.5.5 IS NOT NULL 87
8.5.6 NOT EXISTS 87
8.5.7 NOT UNIQUE 88
8.6 算术操作符 88
8.6.1 加法 88
8.6.2 减法 89
8.6.3 乘法 89
8.6.4 除法 89
8.6.5 数学运算符的组合 90
8.7 小结 90
8.9 自习 91
8.9.1 测验 91
8.8 问与答 91
8.9.2 练习 92
第9章 统计查询的结果数据 93
9.1 什么是统计函数 93
9.1.1 COUNT函数 94
9.1.2 SUM函数 97
9.1.3 AVG函数 97
9.1.4 MAX函数 98
9.1.5 MIN函数 99
9.2 小结 100
9.3 问与答 100
9.4 自习 100
9.4.1 测验 100
9.4.2 练习 101
10.1 为什么要对数据进行分组 102
10.2 GROUP BY子句 102
第10章 数据排序和分组 102
10.2.1 给选择的数据分组 103
10.2.2 分组函数 103
10.2.3 创建分组和使用统计函数 103
10.2.4 使用数字代表列名 106
10.3 GROUP BY与ORDER BY相比较 107
10.4 HAVING子句 109
10.5 小结 110
10.6 问与答 110
10.7 自习 111
10.7.1 测验 111
10.7.2 练习 111
11.1.2 Substring(子串) 112
11.1.4 CONVERT(转换) 112
11.1.3 TRANSLATE(翻译) 112
11.1.1 Concatenation(聚集) 112
11.1 ANSI字符函数的概念 112
第11 章 重新构造数据的表现形式 112
11.1.5 POSIIION(定位) 113
11.2 各种通用的字符函数 113
11.2.1 Concatenation(聚集) 113
11.2.2 TRANSLATE 114
11.2.3 REPLACE 115
11.2.4 UPPER(大写) 115
11.2.5 LOWER(小写) 116
11.2.6 SUBSTR 117
11.2.7 INSTR 118
11.2.8 LTRIM 119
11.2.10 DECODE 120
11.2.9 RTRIM 120
11.3 杂项字符函数 121
11.3.1 查找值的长度 121
11.3.2 NVL(NULL值) 122
11.3.3 LPAD 122
11.3.4 RPAD 123
11.4.5 看起来像什么? 124
11.3.6 ASCII 124
11.4 算术函数 124
11.5 转换函数 125
11.5.1 将字符串转换成数字 125
11.5.2 将数字转换成字符串 126
11.6 字符组合函数的概念 127
11.9 自习 128
11.8 问与答 128
11.7 小结 128
11.9.1 测验 129
11.9.2 练习 129
第12 章 理解日期和时间 130
12.1 日期是怎样存储的 130
12.1.1 日期和时间的标准数据类型 130
12.1.2 DATETIME元素 131
12.1.3 在不同实施方案下的数据类型 131
12.2 日期函数 131
12.2.1 当前日期 131
12.2.2 时区 132
12.2.3 将时间加到日期中 133
12.2.4 比较日期段和时间段 134
12.3.1 日期片段 135
12.2.5 其他日期函数 135
12.3 日期转换 135
12.3.2 将日期转换成字符串 137
12.3.3 将字符串转换成日期 138
12.4 小结 139
12.5 问与答 139
12.6 自习 139
12.6.1 测验 139
12.6.2 练习 140
第四部分 创建复杂的数据库查询 141
第13 章 在查询中连接多张表 141
13.1 从多张表中选择数据 141
13.2 连接的类型 141
13.2.2 等号连接 142
13.2.1 连接条件的组件位置 142
13.2.3 自然连接 143
13.2.4 使用表的别名 144
13.2.5 不等性连接 144
13.2.6 外部连接 146
13.2.7 自我连接 148
13.3 连接时的考虑因素 148
13.3.1 使用基表 148
13.3.2 Cartesian Product 150
13.4 小结 151
13.5 问与答 151
13.6 自习 152
13.6.1 测验 152
13.6.2 练习 152
14.1 什么是子查询? 155
第14章 使用子查询定义未知数据 155
14.1.1 带有SELECT语句的子查询 156
14.1.2 带有INSERT语句的子查询 157
14.1.3 带有UPDATE语句的子查询 158
14.1.4 带有DELETE语句的子查询 159
14.2 将一个子查询嵌入到另一个子查询中 160
14.3 小结 163
14.4 问与答 164
14.5 自习 164
14.5.1 测验 164
14.5.2 练习 165
第15章 将多个查询组合成一个 167
15.1 单个查询与组合查询 167
15.2 为什么要使用组合查询 167
15.3.1 UNION操作符 168
15.3 组合查询操作符 168
15.3.2 UNION ALL操作符 170
15.3.3 INTERSECT操作符 171
EXCEPT操作符 172
15.4 在组合查询中使用ORDER BY 174
15.5 在组合查询中使用GROUP BY子句 175
15.6 检索精确的数据 177
15.7 小结 177
15.8 问与答 177
15.9 自习 178
15.9.1 测验 178
15.9.2 练习 179
16.2 索引是如何工作的? 181
16.1 什么是索引? 181
第16章 利用索引提高性能 181
第五部分 SQL性能调节 181
16.3 CREATE INDEX命令 182
16.4 索引的类型 182
16.4.1 单列索引 182
16.4.2 唯一索引 183
16.4.3 复合索引 183
16.4.4 单列索引和复合索引 184
16.5 何时考虑使用索引 184
16.6 何时避免使用索引 184
16.7 小结 185
16.9.2 练习 186
16.9.1 测验 186
16.9 自习 186
16.8 问与答 186
第17章 提高数据库性能 187
17.1 什么是SQL语句的调节 187
17.2 数据库调节和SQL调节 187
17.3 格式化SQL语句 188
17.3.1 格式化一个语句使之更具可读性 188
17.3.2 合理安排FROM子句中的表 190
17.3.3 连接条件的合理顺序 190
17.3.4 最强限定条件 190
17.4 全表浏览 192
17.5 提高查询性能应考虑的其他因素 193
17.5.1 使用LIKE操作符和通配符 193
17.5.5 使用存储过程 194
17.5.4 避免大的排序操作 194
17.5.2 避免使用 OR操作符 194
17.5.3 避免使用HAVINC子句 194
17.6 小结 195
17.7 问与答 195
17.8 自习 195
17.8.1 测验 195
17.8.2 练习 196
第六部分 使用SQL管理用户和安全 199
第18章 管理数据库用户 199
18.1 用是根本 199
18.1.3 用户在数据库中的地位 200
18.1.4 用户与模式有何不同? 200
18.1.2 谁来管理用户? 200
18.1.1 用户的类型 200
18.2 管理的过程 201
18.2.1 创建用户 201
18.2.2 创建模式 202
18.2.3 删除模式 203
18.2.4 改变用户属性 203
18.2.5 用户会话 204
18.2.6 删除用户访问 205
18.3 用户工具 205
18.4 小结 205
18.5 问与答 205
18.6 自习 206
18.6.1 测验 206
18.6.2 练习 206
19.2 数据库安全与用户管理有何区别 207
第19章 管理数据库安全 207
19.1 什么是数据库安全 207
19.3 什么是特权 208
19.3.1 系统特权 208
19.3.2 对象特权 209
19.3.3 谁不授予或收回特权 209
19.4 控制用户访问 209
19.4.1 CRANT命令 210
19.4.2 REVOKE命令 210
19.4.5 PUBLIC数据库帐户 211
19.4.6 特权组 211
19.7 自习 212
19.7.1 测验 212
19.6 问与答 212
19.5 小结 212
19.7.2 练习 213
第七部分 综合的数据结构 215
第20章 创建并使用视图和同义词 215
20.1 什么是视图 215
20.1.1 视图能用作一种安全的形式 216
20.1.2 利用视图维护综合数据 216
20.1.3 视图是如何保存的? 216
20.2 创建视图 217
20.2.1 从单独的表中创建视图 217
20.2.2 从多个表中创建视图 219
20.2.3 从视图中创建视图 220
20.2.4 WITH CHECK OPTION 221
20.2.9 从视图中创建表 222
20.2.8 视图与表或其他视图的连接 222
20.2.6 向视图中插入数据行 222
20.2.7 从视图中删除数据行 222
20.2.5 更新视图 222
20.2.10 视图与ORDER BY子句 223
20.3 删除视图 224
20.4 什么是同义词? 225
20.5 小结 227
20.6 问与答 227
20.7 自习 227
20.7.1 测验 227
20.7.2 练习 228
第21章 利用系统目录工作 229
21.1 什么是系统目录? 229
21.3 系统目录包含哪些内容? 230
21.2 如何创建系统目录? 230
21.3.1 用户数据 231
21.3.2 安全信息 231
21.3.3 数据库设计信息 231
21.3.4 性能数据 231
21.4 不同数据库实现中的系统目录表举例 231
21.5 查询系统目录 233
21.6 更新系统目录对象 235
21.7 小结 235
21.8 问与答 235
21.9 自习 236
21.9.1 测验 236
21.9.2 练习 236
22.2 光标 237
22.1 高级话题 237
第八部分 实际应用SQL的基础 237
第22章 高级SQL话题 237
22.2.1 打开光标 238
22.2.2 从光标中取来数据 238
22.2.3 关闭光标 239
22.3 存储过程 239
22.4 触发器 241
22.5 动态SQL 242
22.6 调用级界面 243
22.7 使用SQL生成SQL 243
22.8 直接SQL和嵌入的SQL 244
22.9 小结 244
22.11.1 测验 245
22.11.2 练习 245
22.11 自习 245
22.10 问与答 245
第23 章 扩展SQL到企业、Internet和Intranet 246
23.1 SQL和企业 246
23.1.1 后端 246
23.1.2 前端应用程序 247
23.1 访问远程数据库 247
23.2.1 ODBC 248
23.2.2 厂商的连接产品 248
23.3 通过Web界面访问远程数据库 249
23.4 SQL和Internet 249
23.6 小结 250
23.5 SQL和Intarnet 250
23.4.3 使用SQL的前端Web工具 250
23.4.2 让雇员或获得授权的客户享有数据 250
23.4.1 使全世界的客户都能共享数据 250
23.7 问与答 251
23.8 自习 251
23.8.1 测验 251
23.8.2 练习 251
第24 章 对标准SQL的扩充 252
24.1 各种各样的SQL实现 252
24.1.1 不同实现之间的差别 252
24.1.2 遵循ANSI SQL 253
24.1.3 对SQL的扩充 254
24.2 扩充标准SQL的实例 254
24.2.1 Transact-SQL 254
24.2.2 PL/SQL 255
24.3 交互式SQL语句 256
24.4 小结 257
24.5 问与答 257
25.6 自习 257
24.6.1 测验 257
24.6.2 练习 258
第九部分 附录 259
附录A 常用SQL命令 259
附录B ASCII码表 263
附录C 测验题及练习题答案 268
附录D 创建本书例子中的表的CREATE TABLE语句 283
附录E 用于向本书例子中的表插入数据的INSERT语句 285
附录F 术语对照表 290