第1章 SQL概述 1
1.1 DML 1
1.2 DDL 1
1.3 TCL 2
1.4 DCL 2
1.5 总结 2
第2章 SCOTT模式 4
2.1 DEPT 5
2.2 EMP 7
2.3 SALGRADE 10
2.4 BONUS 11
2.5 总结 12
第3章 新增语句 13
3.1 单行新增 13
3.1.1 values单行新增 14
3.1.2 select单行新增 16
3.2 建表新增 18
3.3 查询结果新增 20
3.4 常见误区分析 21
3.4.1 历史数据转移引起的问题 21
3.4.2 values单行新增不要省略列名 24
3.5 总结 25
第4章 删除语句 26
4.1 delete语法 26
4.1.1 直接删除表中记录 26
4.1.2 基于其他表删除表中记录 27
4.2 truncate语法 28
4.3 误删数据恢复 29
4.4 误删对象恢复 30
4.5 常见误区分析 31
4.5.1 慎用delete 31
4.5.2 画蛇添足 32
4.6 总结 32
第5章 更新语句 33
5.1 update语法 33
5.2 单表更新 33
5.3 表关联更新 35
5.4 常见误区分析 36
5.4.1 注意表关联更新 36
5.4.2 注意数据类型 38
5.5 总结 39
第6章 查询语句 40
6.1 查询语句的语法 40
6.2 where子句中常用的运算符 41
6.2.1 算术运算符 42
6.2.2 逻辑运算符 43
6.2.3 比较运算符 44
6.2.4 优先级 50
6.3 分组 51
6.3.1 分组函数 51
6.3.2 创建组 52
6.4 排序 52
6.5 空值 56
6.6 多表连接 56
6.6.1 交叉连接 57
6.6.2 非等值连接 58
6.6.3 等值连接之内连接 59
6.6.4 等值连接之外连接 60
6.6.5 等值连接之自连接 64
6.6.6 等值连接之自然连接 66
6.7 集合运算 67
6.7.1 并集 67
6.7.2 交集 68
6.7.3 差集 69
6.8 子查询 70
6.8.1 多行单列子查询 70
6.8.2 多行多列子查询 72
6.8.3 单行单列子查询 72
6.8.4 单行多列子查询 73
6.8.5 内联视图 74
6.8.6 关联子查询 74
6.9 别名 76
6.9.1 表别名 77
6.9.2 列别名 77
6.10 常见误区分析 79
6.10.1 count争议 79
6.10.2 null的比较 80
6.10.3 单行子查询返回多行 82
6.10.4 分组函数的嵌套 83
6.10.5 not in 84
6.10.6 with(nolock) 86
6.10.7 with(readpast) 88
6.10.8 max用于字符型属性 89
6.11 总结 91
第7章 视图 92
7.1 视图语法 92
7.1.1 创建语法 92
7.1.2 修改语法 93
7.1.3 删除语法 93
7.2 视图举例 94
7.3 视图的作用 95
7.3.1 定制用户数据 95
7.3.2 复杂查询简单化 96
7.4 简单视图 97
7.5 复杂视图 97
7.6 键值保存表 97
7.7 只读视图 98
7.8 with check option 98
7.9 物化视图 101
7.9.1 创建时生成数据选项 101
7.9.2 刷新方式 102
7.9.3 数据刷新的时间 102
7.9.4 物化视图索引 103
7.9.5 物化视图举例 103
7.10 索引视图 106
7.11 常见误区分析 107
7.11.1 单张表组成的视图可以更新 107
7.11.2 多张表组成的视图不能更新 109
7.12 总结 111
第8章 索引 112
8.1 索引语法 113
8.1.1 创建语法 113
8.1.2 删除语法 113
8.2 B-Tree索引 113
8.3 聚集索引 122
8.4 唯一索引 122
8.5 非唯一索引 124
8.6 组合索引 124
8.7 反向键索引 125
8.8 函数索引 125
8.9 索引组织表 127
8.10 常见误区 128
8.10.1 null全表扫描 128
8.10.2 <>比较符引起全表扫描 129
8.10.3 <or>引起全表扫描 131
8.10.4 函数造成全表扫描 131
8.10.5 慎用全表扫描 132
8.10.6 组合索引如何进行索引 133
8.11 总结 135
第9章 约束 136
9.1 约束语法 136
9.1.1 创建语法 136
9.1.2 删除语法 137
9.2 主键约束 137
9.3 外键约束 138
9.4 唯一性约束 141
9.5 非空约束 142
9.6 check约束 143
9.7 默认值约束 144
9.8 常见误区分析 146
9.8.1 是否有必要使用外键 146
9.8.2 程序校验代替检查约束 146
9.9 总结 148
第10章 触发器 149
10.1 触发器语法 149
10.1.1 创建语法 149
10.1.2 修改语法 150
10.1.3 删除语法 151
10.2 变异表 151
10.3 触发器内置对象 151
10.4 行级触发器 151
10.5 语句级触发器 153
10.6 触发时间 156
10.7 instead of触发器 160
10.8 常见误区分析 162
10.8.1 读变异表 162
10.8.2 触发器死循环 162
10.9 总结 164
第11章 存储过程 165
11.1 存储过程语法 165
11.1.1 创建语法 166
11.1.2 修改语法 166
11.1.3 删除语法 167
11.2 IN模式参数 167
11.3 OUT模式参数 169
11.4 删除存储过程 171
11.5 常见误区分析 171
11.5.1 存储过程事务控制 171
11.5.2 参数名称引发的事故 179
11.6 总结 181
第12章 函数 183
12.1 系统函数 183
12.1.1 字符函数 183
12.1.2 数值函数 186
12.1.3 日期函数 186
12.1.4 null相关的函数 189
12.1.5 聚合函数 190
12.1.6 其他常用函数 190
12.2 自定义函数 191
12.2.1 自定义函数语法 191
12.2.2 SQL Server标量值函数 193
12.2.3 SQL Server内联表值函数 193
12.2.4 SQL Server多语句表值函数 194
12.2.5 Oracle标量值函数 194
12.2.6 Oracle表值函数 195
12.3 常见误区分析 196
12.3.1 SQL函数必须有返回值 196
12.3.2 SQL函数中不能进行DML操作 198
12.4 总结 200
第13章 事务 201
13.1 银行转账案例 201
13.2 事务的4个属性 204
13.2.1 原子性 205
13.2.2 一致性 205
13.2.3 隔离性 205
13.2.4 持久性 206
13.3 并发引起的问题 207
13.3.1 脏读 207
13.3.2 不可重复读 207
13.3.3 幻读 207
13.4 事务隔离级别 208
13.4.1 读未提交 208
13.4.2 读提交 208
13.4.3 重复读 208
13.4.4 序列化 209
13.5 事务保存点 209
13.6 自治事务 210
13.6.1 自治事务用于存储过程 210
13.6.2 自治事务用于触发器 212
13.7 常见误区分析 214
13.7.1 自治事务死锁 214
13.7.2 自治事务获取主事务的信息 214
13.7.3 主事务获取自治事务的信息 216
13.8 总结 217
第14章 SQL Server与Oracle的差异 219
14.1 前N行 219
14.2 字符串拼接 220
14.3 获取系统时间 221
14.4 空字符串 221
14.5 表别名 223
14.6 null值排序 224
14.7 update引起select阻塞 225
14.8 SQL、T-SQL和PL/SQL 227
14.9 视图定义中出现排序 227
14.10 对视图非键值保存表的更新 229
14.11 分组函数嵌套 231
14.12 内联视图 232
14.13 关联表删除 233
14.14 关联表更新 234
14.15 自增列 235
14.16 总结 238