目 录 Contents
推荐序
前言
第1章 SQL概述1
1.1 DML1
1.2 DDL1
1.3 TCL2
1.4 DCL2
1.5 总结2
第2章 SCOTT模式4
2.1 DEPT5
2.2 EMP7
2.3 SALGRADE10
2.4 BONUS11
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 慎用delete31
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 in84
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 option98
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 引起全表扫描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/SQL227
14.9 视图定义中出现排序227
14.10 对视图非键值保存表的更新229
14.11 分组函数嵌套231
14.12 内联视图232
14.13 关联表删除233
14.14 关联表更新234
14.15 自增列235
14.16 总结238