第1章  数据库与文件系统  1
         1.1  实体表  3
         1.2  关系表  3
         1.3  行与记录  3
         1.4  列与字段  4
         1.5  模式对象  5
         1.6  CREATE SCHEMA语句  6
         第2章  事务与并发控制  8
         2.1  会话  8
         2.2  事务与ACID  9
         2.2.1  原子性  9
         2.2.2  一致性  10
         2.2.3  隔离性  10
         2.2.4  持久性  10
         2.3  并发控制  11
         2.3.1  三种现象  11
         2.3.2  隔离级别  12
         2.4  保守式并发控制  13
         2.5  快照隔离与乐观式并发  14
         2.6  逻辑并发控制  16
         2.7  死锁与活锁  16
         第3章  数据库模式对象  17
         3.1  CREATE SCHEMA语句  17
         3.2  CREATE PROCEDURE、CREATE FUNCTION以及CREATE TRIGGER语句  18
         3.3  CREATE DOMAIN语句  18
         3.4  创建序列  19
         3.5  创建断言  19
         3.5.1  为模式级约束使用视图  20
         3.5.2  为约束使用主键和断言  23
         3.6  字符集相关结构  25
         3.6.1  创建字符集  25
         3.6.2  创建排序规则  26
         3.6.3  创建翻译  26
         第4章  定位数据和特殊数值  27
         4.1  显式的物理定位器  27
         4.1.1  ROWID和物理磁盘地址  27
         4.1.2  标识列  27
         4.2  生成的标识符  30
         4.2.1  GUID  30
         4.2.2  UUID  31
         4.3  序列生成函数  32
         4.4  预分配值  33
         4.5  特殊序列  34
         4.5.1  Series表  34
         4.5.2  素数  35
         4.5.3  随机顺序值  37
         4.5.4  其他序列  39
         第5章  基础表和相关元素  40
         5.1  CREATE TABLE语句  41
         5.1.1  列约束  41
         5.1.2  DEFAULT子句  43
         5.1.3  NOT NULL约束  43
         5.1.4  CHECK()约束  44
         5.1.5  UNIQUE以及PRIMARY KEY约束  46
         5.1.6  REFERENCES子句  47
         5.2  嵌套UNIQUE约束  49
         5.2.1  重叠键  52
         5.2.2  单列唯一性与多列唯一性  54
         5.3  CREATE ASSERTION约束  62
         5.4  临时表  62
         5.5  表操作  63
         5.5.1  DROP TABLE  <表名>  64
         5.5.2  ALTER TABLE  64
         5.6  避免属性分割  65
         5.6.1  表级属性分割  66
         5.6.2  行级属性分割  67
         5.7  在DDL中表现类层次关系  68
         5.8  显式物理定位器  70
         5.9  自增列  70
         5.9.1  ROWID与物理磁盘地址  72
         5.9.2  标识列  72
         5.9.3  对比标识列和序列  73
         5.10  生成标识符  73
         5.10.1  行业标准的唯一标识符  73
         5.10.2  国防部的唯一标识符  74
         5.10.3  序列生成函数  75
         5.10.4  唯一值生成器  75
         5.10.5  验证源  76
         5.11  关于重复行  77
         5.12  其他模式对象  78
         5.13  临时表  79
         5.14  CREATE DOMAIN语句  79
         5.15  CREATE TRIGGER语句  80
         5.16  CREATE PROCEDURE语句  80
         5.17  DECLARE CURSOR语句  81
         5.17.1  如何使用游标  83
         5.17.2  位置更新及删除语句  84
         第6章  过程式、半过程式以及声明式编程  86
         6.1  软件工程基本原理  86
         6.2  内聚性  86
         6.3  耦合度  87
         6.4  大跨越  88
         6.4.1  一个常见的错误  88
         6.4.2  一处改进  89
         6.5  重写技巧  94
         6.5.1  数据表和生成器代码  95
         6.5.2  用计算替代查找  96
         6.5.3  斐波那契数列  96
         6.6  谓词函数  97
         6.7  过程化分解和逻辑分解  98
         6.7.1  过程式分解方案  99
         6.7.2  逻辑分解方案  100
         第7章  过程式结构  102
         7.1  创建过程  102
         7.2  创建触发器  103
         7.3  游标  106
         7.3.1  DECLARE CURSOR语句  106
         7.3.2  ORDER BY子句  107
         7.3.3  OPEN语句  113
         7.3.4  FETCH语句  113
         7.3.5  CLOSE语句  114
         7.3.6  DEALLOCATE语句  114
         7.3.7  如何使用游标  114
         7.3.8  位置更新及删除语句  117
         7.4  序列  117
         7.5  生成列  118
         7.6  表函数  119
         第8章  辅助表  121
         8.1  序列表  121
         8.1.1  对列表进行枚举  122
         8.1.2  将序列映射为循环  124
         8.1.3  取代迭代循环  125
         8.2  查找辅助表  127
         8.2.1  简单转换辅助表  128
         8.2.2  多转换值辅助表  128
         8.2.3  多参数辅助表  129
         8.2.4  范围辅助表  129
         8.2.5  层次结构辅助表  130
         8.2.6  “一个真正的查找表”  131
         8.3  辅助函数表  133
         8.3.1  用辅助表求反函数  134
         8.3.2  用辅助函数表进行插值  141
         8.4  全局常量表  143
         8.4.1  预分配值  143
         8.4.2  素数  144
         8.4.3  斐波那契数列  144
         8.4.4  随机顺序值  145
         8.5  把过程代码转换成表时的注意事项  147
         第9章  规范化  152
         9.1  函数依赖和多值依赖  154
         9.2  第一范式(1NF)  154
         9.3  第二范式(2NF)  158
         9.4  第三范式(3NF)  159
         9.5  基本关键字范式(EKNF)  160
         9.6  Boyce-Codd范式(BCNF)  161
         9.7  第四范式(4NF)  162
         9.8  第五范式(5NF)  163
         9.9  域-键范式(DKNF)  164
         9.10  规范化的实用技巧  171
         9.11  键类型  172
         9.11.1  自然键  172
         9.11.2  人工键  172
         9.11.3  对外暴露的物理定位器  173
         9.12  非规范化的实用技巧  174
         第10章  SQL的数值数据  180
         10.1  数值类型  180
         10.2  数值类型的转换  183
         10.2.1  数值的舍入和截断  183
         10.2.2  CAST()函数  185
         10.3  四则运算函数  185
         10.4  算术运算和NULL  186
         10.5  值与NULL的相互转换  187
         10.5.1  NULLIF()函数  187
         10.5.2  COALESCE()函数  187
         10.6  数学函数  189
         10.6.1  数学运算符  189
         10.6.2  指数函数  191
         10.6.3  标量函数  192
         10.6.4  将数值转换为文字  192
         10.7  唯一值生成器  193
         10.7.1  存有间隙的序列  194
         10.7.2  预分配数值  194
         10.8  IP地址  195
         10.8.1  CHAR(39)存储  195
         10.8.2  二进制存储  196
         10.8.3  使用多个单独的SMALLINT  196
         第11章  SQL中的时间数据类型  197
         11.1  关于日历标准的说明  197
         11.2  SQL时间数据类型  199
         11.2.1  时间的内部表示  200
         11.2.2  日期格式标准  200
         11.2.3  处理时间戳  201
         11.2.4  处理时间  202
         11.2.5  时区和夏令时  203
         11.3  INTERVAL数据类型  204
         11.4  时间算术  206
         11.5  时间数据模型的特性  207
         11.5.1  为持续时间建模  207
         11.5.2  持续时间之间的关系  209
         第12章  字符数据类型  211
         12.1  SQL字符串问题  211
         12.1.1  字符串相等问题  212
         12.1.2  字符串排序问题  212
         12.1.3  字符串分组问题  213
         12.2  标准字符串函数  213
         12.3  常见的厂商扩展  214
         12.4  Cutter表  222
         12.5  嵌套替换  223
         第13章  NULL:SQL中的缺失数据  224
         13.1  空表和缺失表  225
         13.2  列中的缺失值  225
         13.3  上下文和缺失值  226
         13.4  比较NULL  227
         13.5  NULL和逻辑  228
         13.5.1  子查询谓词中的NULL  229
         13.5.2  逻辑值谓词  231
         13.6  算术中的NULL值  231
         13.7  函数中的NULL值  231
         13.8  NULL和宿主语言  231
         13.9  NULL的设计忠告  232
         13.10  关于多NULL值的说明  234
         第14章  多列数据元素  237
         14.1  距离函数  237
         14.2  在SQL中存储IPv4地址  239
         14.2.1  使用单个VARCHAR(15)列表示IPv4地址  239
         14.2.2  使用一个INTEGER列表示IPv4地址  239
         14.2.3  使用四个SMALLINT列表示IPv4地址  240
         14.3  在SQL中存储IPv6地址  241
         14.4  货币与其他单位的转换  242
         14.5  社会安全号  242
         14.6  有理数  245
         第15章  表操作  246
         15.1  DELETE FROM语句  246
         15.1.1  DELETE FROM子句  246
         15.1.2  WHERE子句  247
         15.1.3  根据辅助表中的数据执行删除  249
         15.1.4  在相同表内进行删除  250
         15.1.5  不用声明引用完整性在多个表中进行删除  252
         15.2  INSERT INTO语句  253
         15.2.1  INSERT INTO子句  253
         15.2.2  插入的性质  254
         15.2.3  批量装载和卸载实用程序  255
         15.3  UPDATE语句  255
         15.3.1  UPDATE子句  255
         15.3.2  WHERE子句  256
         15.3.3  SET子句  256
         15.3.4  利用第二张表进行更新  257
         15.3.5  在UPDATE中使用CASE表达式  259
         15.4  常见厂商扩展的缺陷说明  261
         15.5  MERGE语句  263
         第16章  比较或theta操作  266
         16.1  数据类型转换  266
         16.1.1  日期显示格式  267
         16.1.2  其他显示格式  268
         16.2  SQL中的行比较  268
         16.3  IS  [NOT] DISTINCT FROM操作符  270
         第17章  值化谓词  271
         17.1  IS  NULL谓词  271
         17.2  IS  [NOT] {TRUE | FALSE | UNKNOWN}谓词  272
         17.3  IS  [NOT] NORMALIZED谓词  273
         第18章  CASE表达式  275
         18.1  CASE表达式  275
         18.1.1  COALESCE()和NULLIF()函数  278
         18.1.2  带GROUP BY的CASE表达式  278
         18.1.3  CASE、CHECK()子句和逻辑蕴涵  280
         18.2  子查询表达式和常量  283
         18.3  Rozenshtein特征函数  283
         第19章  LIKE与SIMILAR TO谓词  285
         19.1  使用模式的技巧  285
         19.2  NULL值和空字符串的谓词结果  287
         19.3  LIKE并不是相等  287
         19.4  用联结消除LIKE谓词  287
         19.5  CASE表达式和LIKE搜索条件  288
         19.6  SIMILAR TO谓词  289
         19.7  字符串的有关技巧  291
         19.7.1  字符串的字符内容  291
         19.7.2  搜索与声明一个串  291
         19.7.3  创建字符串中的索引  292
         第20章  BETWEEN和OVERLAPS谓词  293
         20.1  BETWEEN谓词  293
         20.1.1  NULL值的结果  294
         20.1.2  空集的结果  294
         20.1.3  程序设计技巧  295
         20.2  OVERLAPS谓词  296
         第21章  [NOT] IN()谓词  305
         21.1  优化IN()谓词  306
         21.2  用IN()谓词替换OR  309
         21.3  NULL和IN()谓词  309
         21.4  IN()谓词和引用约束  312
         21.5  IN()谓词和标量查询  313
         第22章  EXISTS()谓词  315
         22.1  EXISTS和NULL  316
         22.2  EXISTS和INNER  JOIN  318
         22.3  NOT EXISTS和OUTER JOIN  318
         22.4  EXISTS()和量词  319
         22.5  EXISTS()和引用约束  320
         22.6  EXISTS和三值逻辑  320
         第23章  量化子查询谓词  323
         23.1  标量子查询比较  323
         23.2  量词和缺失数据  324
         23.3  ALL谓词和极值函数  326
         23.4  UNIQUE谓词  327
         23.5  DISTINCT谓词  328
         第24章  简单SELECT语句  329
         24.1  SELECT语句执行顺序  329
         24.2  单级SELECT语句  329
         第25章  高级SELECT语句  336
         25.1  关联子查询  336
         25.2  嵌入的INNER JOIN  340
         25.3  OUTER JOIN  341
         25.3.1  OUTER JOIN的一些历史  342
         25.3.2  NULL和OUTER JOIN  346
         25.3.3  NATURAL JOIN与搜索式OUTER JOIN  347
         25.3.4  OUTER JOIN自联结  348
         25.3.5  两次或多次OUTER  JOIN  349
         25.3.6  OUTER JOIN和聚合函数  351
         25.3.7  FULL OUTER JOIN  351
         25.4  UNION JOIN操作符  352
         25.5  标量SELECT表达式  353
         25.6  旧JOIN语法与新JOIN语法  354
         25.7  受约束的JOIN  355
         25.7.1  库存和订单  355
         25.7.2  稳定的婚姻  356
         25.7.3  将球装入盒中  360
         25.8  Codd博士的T联结  363
         25.8.1  Stobbs方案  366
         25.8.2  Pieere方案  367
         25.8.3  参考文献  368
         第26章  虚拟表:视图、派生表、CTE及MQT  369
         26.1  查询中的视图  369
         26.2  可更新视图和只读视图  370
         26.3  视图的类型  371
         26.3.1  单表投影和限制  371
         26.3.2  计算列  371
         26.3.3  转换列  372
         26.3.4  分组视图  372
         26.3.5  联结视图  373
         26.3.6  视图的联结  374
         26.3.7  嵌套视图  375
         26.4  数据库引擎如何处理视图  376
         26.4.1  视图列列表  376
         26.4.2  视图物化  376
         26.4.3  内嵌文本扩展  377
         26.4.4  指针结构  378
         26.4.5  索引和视图  379
         26.5  WITH CHECK OPTION子句  379
         26.6  删除视图  383
         26.7  视图与临时表的使用提示  384
         26.7.1  使用视图  384
         26.7.2  使用临时表  385
         26.7.3  用视图扁平化表  385
         26.8  使用派生表  387
         26.8.1  FROM子句中的派生表  387
         26.8.2  包含VALUES构造器的派生表  388
         26.9  公用表表达式  389
         26.10  递归公用表表达式  390
         26.10.1  简单增量  391
         26.10.2  简单树遍历  391
         26.11  物化查询表  392
         第27章  在查询中分区数据  393
         27.1  覆盖和分区  393
         27.1.1  按范围分区  393
         27.1.2  单列范围表  394
         27.1.3  用函数进行分区  394
         27.1.4  按顺序分区  395
         27.1.5  使用窗口函数进行分区  397
         27.2  关系除法  398
         27.2.1  带余除法  399
         27.2.2  精确除法  400
         27.2.3  性能说明  400
         27.2.4  Todd的除法  401
         27.2.5  带JOIN的除法  403
         27.2.6  用集合操作符进行除法  403
         27.3  Romley除法  404
         27.4  RDBMS中的布尔表达式  407
         27.5  FIFO和LIFO子集  408
         第28章  分组操作  411
         28.1  GROUP BY子句  411
         28.2  GROUP BY和HAVING  412
         28.3  多层次聚合  415
         28.3.1  多级聚合的分组视图  415
         28.3.2  多层次聚合的子查询表达式  416
         28.3.3  多层聚合的CASE表达式  417
         28.4  在计算列上分组  418
         28.5  成对分组  418
         28.6  排序和GROUP BY  420
         第29章  简单聚合函数  422
         29.1  COUNT()函数  422
         29.2  SUM()函数  426
         29.3  AVG()函数  427
         29.3.1  空组的平均数  428
         29.3.2  多个列上的平均值  429
         29.4  极值函数  430
         29.4.1  简单的极值函数  430
         29.4.2  广义极值函数  432
         29.4.3  多条件极值函数  438
         29.4.4  GREATEST()和LEAST()函数  439
         29.5  LIST()聚合函数  442
         29.5.1  使用递归CTE的LIST聚合函数  442
         29.5.2  交叉表的LIST()函数  443
         29.6  PRD()聚合函数  443
         29.6.1  通过表达式实现PRD()函数  444
         29.6.2  通过对数实现PRD()聚合函数  445
         29.7  位运算符聚合函数  447
         29.7.1  OR位运算符聚合函数  448
         29.7.2  AND位运算符聚合函数  449
         第30章  高级分组、窗口聚合以及SQL中的OLAP  450
         30.1  星模式  450
         30.2  GROUPING操作符  451
         30.2.1  GROUP BY GROUPING  SET  451
         30.2.2  ROLLUP  452
         30.2.3  CUBE  452
         30.2.4  SQL的OLAP示例  453
         30.3  窗口子句  454
         30.3.1  PARTITION BY子句  454
         30.3.2  ORDER BY子句  454
         30.3.3  窗口帧子句  455
         30.4  窗口化聚合函数  456
         30.5  序号函数  457
         30.5.1  行号  457
         30.5.2  RANK()和DENSE_RANK()  457
         30.5.3  PERCENT_RANK()和CUME_DIST()  457
         30.5.4  一些示例  458
         30.6  厂商扩展  460
         30.6.1  LEAD和LAG函数  460
         30.6.2  FIRST和LAST函数  461
         30.7  一点历史知识  462
         第31章  SQL中的描述性统计  463
         31.1  众数  463
         31.2  AVG()函数  464
         31.3  中值  464
         31.3.1  中值编程问题  465
         31.3.2  Celko第一中值  466
         31.3.3  Date第二中值  467
         31.3.4  Murchison中值  468
         31.3.5  Celko第二中值  468
         31.3.6  Vaughan提出的应用视图的中值  470
         31.3.7  使用特征函数的中值  470
         31.3.8  Celko第三中值  473
         31.3.9  Ken Henderson的中值  475
         31.3.10  OLAP中值  476
         31.4  方差和标准偏差  478
         31.5  平均偏差  479
         31.6  累积统计  479
         31.6.1  运行差分  479
         31.6.2  累积百分比  481
         31.6.3  序号函数  483
         31.6.4  五分位数和相关统计  486
         31.7  交叉表  486
         31.7.1  通过交叉联结建立交叉表  489
         31.7.2  通过外联结建立交叉表  490
         31.7.3  通过子查询建立交叉表  490
         31.7.4  使用CASE表达式建立交叉表  491
         31.8  调和平均数和几何平均数  491
         31.9  SQL中的多变量描述统计数据  492
         31.9.1  协方差  492
         31.9.2  皮尔森相关系数r  493
         31.9.3  多变量描述统计中的NULL值  493
         31.10  SQL:2006中的统计函数  494
         31.10.1  方差、标准偏差以及描述统计  494
         31.10.2  相关性  494
         31.10.3  分布函数  495
         第32章  子序列、区域、顺串、间隙及岛屿  496
         32.1  查找尺寸为n的子区域  496
         32.2  为区域编号  497
         32.3  查找最大尺寸的区域  499
         32.4  界限查询  502
         32.5  顺串和序列查询  503
         32.6  数列的求和  506
         32.7  交换和平移列表值  509
         32.8  压缩一列数值  510
         32.9  折叠一列数值  510
         32.10  覆盖  511
         第33章  SQL中的矩阵  516
         33.1  通过命名列进行访问的数组  516
         33.2  通过下标列进行访问的数组  519
         33.3  SQL的矩阵操作  520
         33.3.1  矩阵等式  521
         33.3.2  矩阵加法  521
         33.3.3  矩阵乘法  522
         33.3.4  矩阵转置  523
         33.3.5  行排序及列排序  524
         33.3.6  其他矩阵操作  524
         33.4  将表扁平化为数组  524
         33.5  比较表格式中的数组  526
         第34章  集合操作  528
         34.1  UNION和UNION ALL  528
         34.1.1  执行顺序  530
         34.1.2  混合使用UNION和UNION ALL操作符  531
         34.1.3  对同一表中的列执行UNION操作  531
         34.2  INTERSECT和EXCEPT  531
         34.2.1  没有NULL值和重复行时的INTERSECT和EXCEPT操作  534
         34.2.2  存在NULL值和重复行时的INTERSECT和EXCEPT操作  535
         34.3  关于ALL和SELECT DISTINCT的一个说明  536
         34.4  相等子集和真子集  536
         第35章  子集  538
         35.1  表中的每个第n项  538
         35.2  从表中选取随机行  539
         35.3  CONTAINS操作符  543
         35.3.1  真子集操作符  543
         35.3.2  表的相等操作  544
         35.4  序列间隙  547
         35.5  重叠区间的覆盖问题  549
         35.6  选取有代表性的子集  552
         第36章  SQL中的树和层次结构  556
         36.1  邻接列表模型  557
         36.1.1  复杂约束  557
         36.1.2  查询的过程遍历  559
         36.1.3  更改表  560
         36.2  路径枚举模型  560
         36.2.1  查找子树和节点  561
         36.2.2  找出层次和后代  561
         36.2.3  删除节点和子树  562
         36.2.4  完整性约束  562
         36.3  层次结构的嵌套集合模型  563
         36.3.1  计数特性  564
         36.3.2  包含特性  564
         36.3.3  下级节点  565
         36.3.4  层次聚合  566
         36.3.5  删除节点和子树  566
         36.3.6  将邻接列表转换为嵌套集合模型  567
         36.4  其他表现树和层次结构的模型  569
         第37章  SQL中的图  570
         37.1  邻接列表模型图  570
         37.1.1  SQL和邻接列表模型  571
         37.1.2  路径与CTE  572
         37.1.3  环状图  577
         37.1.4  邻接矩阵模型  579
         37.2  分割嵌套集合模型表示的图节点  580
         37.2.1  图中的所有节点  581
         37.2.2  路径端点  581
         37.2.3  可达节点  582
         37.2.4  边  582
         37.2.5  入度和出度  582
         37.2.6  源节点、汇聚节点、孤立节点和内部节点  583
         37.2.7  将无环图转化为嵌套集合  584
         37.3  多边形中的点  586
         37.4  图论参考书目  588
         第38章  时间查询  589
         38.1  时间数学  589
         38.2  个性化日历  591
         38.3  时间序列  592
         38.3.1  时间序列中的间隙  593
         38.3.2  连续时间段  595
         38.3.3  相邻事件中缺失的时间  600
         38.3.4  查找日期  603
         38.3.5  时间的起始点和结束点  604
         38.3.6  开始时间和结束时间  605
         38.4  儒略日  606
         38.5  其他时间函数  609
         38.6  星期  610
         38.7  在表中对时间建模  612
         38.8  日历辅助表  614
         38.9  2000年问题  616
         38.9.1  零  616
         38.9.2  闰年  617
         38.9.3  千年问题  618
         38.9.4  旧数据中的怪异日期  619
         38.9.5  后果  619
         第39章  优化SQL  620
         39.1  访问方法  621
         39.1.1  顺序访问  621
         39.1.2  索引访问  621
         39.1.3  散列索引  622
         39.1.4  位向量索引  622
         39.2  如何建立索引  622
         39.2.1  使用简单查询条件  623
         39.2.2  简单字符串表达式  624
         39.2.3  简单时间表达式  625
         39.3  提供额外信息  626
         39.4  谨慎建立多列索引  627
         39.5  考察IN谓词  627
         39.6  避免UNION  629
         39.7  联结胜于嵌套查询  629
         39.8  使用更少的语句  630
         39.9  避免排序  631
         39.10  避免交叉联结  634
         39.11  了解优化器  635
         39.12  在模式更改后重编译静态SQL  636
         39.13  临时表有时能带来方便  637
         39.14  更新统计数据  639
         39.15  不要迷信较新的特性  639
         参考文献  642
      · · · · · ·     (
收起)