[美] Joe Celko《SQL权威指南(第4版)》

[美] Joe Celko《SQL权威指南(第4版)》

作者:[美] Joe Celko

出版社:人民邮电出版社

出版年:2013-1

评分:7.4

ISBN:9787115296634

所属分类:网络科技

书刊介绍

内容简介

《SQL权威指南(第4版)》为SQL名著中文版,兼顾技术与实践,全面细致介绍高级技术,致力于打造SQL编程专家。《SQL权威指南(第4版)》阐释了数据库设计、优化和操作的各方面内容,提供了成为SQL编程专业人士所需的技术与技巧、针对新旧挑战性难题的优秀解决方案、专业的思考方式(以保证程序的正确性与高效性),并涉及了数据库设计与规范化、SQL数据类型、查询、分组、集合操作、优化等主题。另外,JoeCelko(塞科)以通俗易懂的语言叙述了一些关键问题,比如避免使用过多NULL的原因及查询优化方式等。《SQL权威指南(第4版)》适合中高级SQL编程人员学习参考。

作品目录

第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  事务与ACID9

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  GUID30

4.2.2  UUID31

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 TABLE64

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  算术运算和NULL186

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  使用多个单独的SMALLINT196

第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  比较NULL227

13.5  NULL和逻辑228

13.5.1  子查询谓词中的NULL229

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()谓词替换OR309

21.3  NULL和IN()谓词309

21.4  IN()谓词和引用约束312

21.5  IN()谓词和标量查询313

第22章 EXISTS()谓词315

22.1  EXISTS和NULL316

22.2  EXISTS和INNER JOIN318

22.3  NOT EXISTS和OUTER JOIN318

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 JOIN340

25.3  OUTER JOIN341

25.3.1  OUTER JOIN的一些历史342

25.3.2  NULL和OUTER JOIN346

25.3.3  NATURAL JOIN与搜索式OUTER JOIN347

25.3.4  OUTER JOIN自联结348

25.3.5  两次或多次OUTER JOIN349

25.3.6  OUTER JOIN和聚合函数351

25.3.7  FULL OUTER JOIN351

25.4  UNION JOIN操作符352

25.5  标量SELECT表达式353

25.6  旧JOIN语法与新JOIN语法354

25.7  受约束的JOIN355

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及MQT369

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和HAVING412

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 BY420

第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中的OLAP450

30.1  星模式450

30.2  GROUPING操作符451

30.2.1  GROUP BY GROUPING SET451

30.2.2  ROLLUP452

30.2.3  CUBE452

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  皮尔森相关系数r493

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 ALL528

34.1.1  执行顺序530

34.1.2  混合使用UNION和UNION ALL操作符531

34.1.3  对同一表中的列执行UNION操作531

34.2  INTERSECT和EXCEPT531

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  路径与CTE572

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章 优化SQL620

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  避免UNION629

39.7  联结胜于嵌套查询629

39.8  使用更少的语句630

39.9  避免排序631

39.10  避免交叉联结634

39.11  了解优化器635

39.12  在模式更改后重编译静态SQL636

39.13  临时表有时能带来方便637

39.14  更新统计数据639

39.15  不要迷信较新的特性639

参考文献642

相关推荐

微信二维码