SQL权威指南(第4版)

出版时间:2013-1  出版社:人民邮电出版社  作者:Joe Celko  页数:652  字数:1039000  译者:朱 巍,钟 鸣,王 渊  
Tag标签:无  

前言

  第4版 简介  与之前推出的第1版、第2版以及第3版一样,第4版也面向想要了解高级编程技巧的SQL编程人员。本书读者需要具有一年以上实际SQL编程经验。这并不是一本入门书,所以我希望亚马逊网站的评论中不会出现前几版上市时的抱怨。  本书第1版出版于十年前,并被部分SQL程序员奉为经典。在我访问过的几乎所有软件公司中都能看到程序员的桌子上放着这本书。最棒的是,我发现有即时贴伸出书本;太棒了,看来他们常常要用到这本书,所以才会用即时贴当书签。  十年间的变化层次数据库及网络数据库仍然在大公司的遗留系统中运行。财富500强公司中仍存在IMS(Information Management System,信息管理系统)和传统文件,尽管SQL工作者并不愿意承认这点。不过SQL工作者依然可以感到自豪,这十年来,基于SQL的系统取得了很大进展。现在,我们拥有了几乎无所不包的应用程序,以及重要的、更小的数据库。  尽管OO编程依然牢牢占据主导地位,但是在下一个十年里,函数式编程或许能够抢占OO编程的一些空间。尽管对象以及对象关系数据库找到了适合的市场,但仍没有机会占据主流  地位。  2010年后,XML不再流行。从技术层面讲,XML是一种用于描述数据以及将数据从某一平台移植到另一平台的语法,而它的支持工具也提供了搜索以及重新格式化的功能。INCITS H2(前身为ANSI X3H2数据库标准委员会)下设了一个SQL/XML委员会,以确保XML能与其支持工具一同工作。  数据仓库不再是只有大型企业才能使用的奢侈品。由于硬件和软件价格的下降,中型企业现在也能使用数据仓库了。编写OLAP查询与编写OLTP查询不同,也许需要专门写一本讲OLAP查询的“Smarties”书。  开源数据库做得很棒,也越来越符合标准。LAMP(Linux、 Apache、 MySQL以及Python/PHP)平台占领了绝大多数网站。Ingres、Postgres、Firebird以及其他数据库实现了ANSI SQL-92标准特性、大多数的SQL-99特性以及一些SQL:2003特性。  纵列数据库(columnar database)、并行以及开放式并发机制开始出现在商业产品中,而不再局限于实验室内。SQL标准总是在不断改变,但并不是每一次都变得更好。标准的某些部分变得更趋于关系及集合,而其他部分则很明显地往使用过程式思想、处理非关系型数据的方向发展,这类标准建立在文件系统模型之上。引用David McGoveran的一句话:“委员会从未见过一个不喜欢的特性。”这句话,看来说得没错。  ANSI/ISO SQL-92标准是一组公有的子集,通用于各类SQL产品,使这些产品能够为人所用。事实上,几年前美国政府将SQL-99标准描述为“仍在开发的标准”,要求联邦政府的合同必须与SQL-92标准兼容。  在开发兼容SQL-92标准的产品时,我们可以使用FIPS-127一致性测试套件对产品进行测试,这样所有供应商均可朝着同一个方向迈进。不过遗憾的是,克林顿政府中止了这个规定,而一致性问题又开始浮现。Whitemarsh信息系统公司董事长Michael M. Gorman曾担任数据库标准委员会INCITS H2秘书长二十余年,他有一篇关于一致性问题的重要论文发表在Wiscorp.com,该网站中其他关于SQL历史中政治方面的文章也值得一读。  今天, SQL-99是编写在绝大多数平台上的可移植代码的标准。不过由于厂商支持SQL:2003特性的速度很快,我并不认为要局限于各个平台的最小交集。  第4版的新内容  在第2版中,我曾删除了书中的一些理论,并将这部分理论移到了Joe Celko’s Data and Databases: Concepts in Practice一书中。我找不到任何理由将这部分理论移回到第4版。由于树及层次技术相关内容足以编成一本书,因此我将这部分知识扩展并移到Joe Celko’s Trees and Hierarchies in SQL for Smarties中。不过本书也简单提及了树及层次技术。  由于本书面向高级程序员,因此我将适合新手的编程技巧移到了Joe Celko’s SQL Programming Style一书中讲述。本书适合那些编写真正SQL语句的读者,而非使用某些SQL“方言”或伪装成SQL的原生语言的读者。实际上,将标准SQL语言翻译成他们所使用的SQL“方言”不会太麻烦。  我尝试在方案中嵌入注解,以说明为什么该方案能够生效。我希望这种方式能帮助读者了解底层原理,以便将此原理应用到其他情形。  许多人为本书提供了素材,他们有些直接告诉我这些素材,有些则是通过新闻组提供了素材,而我无法对这些提供素材的朋友一一表示感谢,但我会尽量在他们提供的代码后面贴上他们的名字。为了避免遗漏某些朋友,我在此列出向我提供了素材或思路的朋友名单:Aaron Bertrand、 Alejandro Mesa、 Anith Sen、 Craig Mullins (为本书的多个版本进行了校对)、 Daniel A. Morgan、 David Portas、 David Cressey、 Dawn M. Wolthuis、 Don Burleson、 Erland Sommarskog、 Itzak Ben-Gan、 John Gilson、 Knut Stolze、 Ken Henderson、 Louis Davidson、 Dan Guzman、 Hugo Kornelis、 Richard Romley、 Serge Rielau、 Steve Kass、 Tom Moreau、 Troels Arvin、 Vadim Tropashko、 Plamen Ratchev、 Gert-Jan Strik。另外,还要感谢其他为我提供了素材,而我却忘记了名字的朋友们。  更正和补充[1]  请将所有更正、补充、建议、改进以及替代方案发给出版商或我本人,尤其是当你发现了某些更好的方法时,请一定告知。  [1]① 读者也可免费注册图灵社区并为本书提交勘误。——编者注

内容概要

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

作者简介

  Joe Celko,世界著名的数据库专家,曾担任ANSl
SQL标准委员会成员达10年之久,参与了SQL-89和SQL-92标准的制定,是世界上读者数量最多的SQL图书作者之一。他曾撰写过一系列专栏,并通过他的新闻组支持和推动了数据库编程技术以及ANSl/ISO标准的发展。除本书外,他还撰写了多部SQL经典著作,包括《SQL编程风格》、《SQL解惑》和《SQL权威指南》,上述作品的中文版均已由人民邮电出版社出版。

书籍目录

第1章 数据库与文件系统 
1.1 实体表 
1.2 关系表 
1.3 行与记录 
1.4 列与字段 
1.5 模式对象 
1.6 CREATE SCHEMA语句 
第2章 事务与并发控制 
2.1 会话 
2.2 事务与ACID 
2.2.1 原子性 
2.2.2 一致性 
2.2.3 隔离性 
2.2.4 持久性 
2.3 并发控制 
2.3.1 三种现象 
2.3.2 隔离级别 
2.4 保守式并发控制 
2.5 快照隔离与乐观式并发 
2.6 逻辑并发控制 
2.7 死锁与活锁 
第3章 数据库模式对象 
3.1 CREATE SCHEMA语句 
3.2 CREATE PROCEDURE、CREATE FUNCTION以及CREATE TRIGGER语句 
3.3 CREATE DOMAIN语句 
3.4 创建序列 
3.5 创建断言 
3.5.1 为模式级约束使用视图 
3.5.2 为约束使用主键和断言 
3.6 字符集相关结构 
3.6.1 创建字符集 
3.6.2 创建排序规则 
3.6.3 创建翻译 
第4章 定位数据和特殊数值 
4.1 显式的物理定位器 
4.1.1 ROWID和物理磁盘地址 
4.1.2 标识列 
4.2 生成的标识符 
4.2.1 GUID 
4.2.2 UUID 
4.3 序列生成函数 
4.4 预分配值 
4.5 特殊序列 
4.5.1 Series表 
4.5.2 素数 
4.5.3 随机顺序值 
4.5.4 其他序列 
第5章 基础表和相关元素 
5.1 CREATE TABLE语句 
5.1.1 列约束 
5.1.2 DEFAULT子句 
5.1.3 NOT NULL约束 
5.1.4 CHECK()约束 
5.1.5 UNIQUE以及PRIMARY KEY约束 
5.1.6 REFERENCES子句 
5.2 嵌套UNIQUE约束 
5.2.1 重叠键 
5.2.2 单列唯一性与多列唯一性 
5.3 CREATE ASSERTION约束 
5.4 临时表 
5.5 表操作 
5.5.1 DROP TABLE<表名> 
5.5.2 ALTER TABLE 
5.6 避免属性分割 
5.6.1 表级属性分割 
5.6.2 行级属性分割 
5.7 在DDL中表现类层次关系 
5.8 显式物理定位器 
5.9 自增列 
5.9.1 ROWID与物理磁盘地址 
5.9.2 标识列 
5.9.3 对比标识列和序列 
5.10 生成标识符 
5.10.1 行业标准的唯一标识符 
5.10.2 国防部的唯一标识符 
5.10.3 序列生成函数 
5.10.4 唯一值生成器 
5.10.5 验证源 
5.11 关于重复行 
5.12 其他模式对象 
5.13 临时表 
5.14 CREATE DOMAIN语句 
5.15 CREATE TRIGGER语句 
5.16 CREATE PROCEDURE语句 
5.17 DECLARE CURSOR语句 
5.17.1 如何使用游标 
5.17.2 位置更新及删除语句 
第6章 过程式、半过程式以及声明式编程 
6.1 软件工程基本原理 
6.2 内聚性 
6.3 耦合度 
6.4 大跨越 
6.4.1 一个常见的错误 
6.4.2 一处改进 
6.5 重写技巧 
6.5.1 数据表和生成器代码 
6.5.2 用计算替代查找 
6.5.3 斐波那契数列 
6.6 谓词函数 
6.7 过程化分解和逻辑分解 
6.7.1 过程式分解方案 
6.7.2 逻辑分解方案 
第7章 过程式结构 
7.1 创建过程 
7.2 创建触发器 
7.3 游标 
7.3.1 DECLARE CURSOR语句 
7.3.2 ORDER BY子句 
7.3.3 OPEN语句 
7.3.4 FETCH语句 
7.3.5 CLOSE语句 
7.3.6 DEALLOCATE语句 
7.3.7 如何使用游标 
7.3.8 位置更新及删除语句 
7.4 序列 
7.5 生成列 
7.6 表函数 
第8章 辅助表 
8.1 序列表 
8.1.1 对列表进行枚举 
8.1.2 将序列映射为循环 
8.1.3 取代迭代循环 
8.2 查找辅助表 
8.2.1 简单转换辅助表 
8.2.2 多转换值辅助表 
8.2.3 多参数辅助表 
8.2.4 范围辅助表 
8.2.5 层次结构辅助表 
8.2.6 “一个真正的查找表” 
8.3 辅助函数表 
8.3.1 用辅助表求反函数 
8.3.2 用辅助函数表进行插值 
8.4 全局常量表 
8.4.1 预分配值 
8.4.2 素数 
8.4.3 斐波那契数列 
8.4.4 随机顺序值 
8.5 把过程代码转换成表时的注意事项 
第9章 规范化 
9.1 函数依赖和多值依赖 
9.2 第一范式(1NF) 
9.3 第二范式(2NF) 
9.4 第三范式(3NF) 
9.5 基本关键字范式(EKNF) 
9.6 Boyce-Codd范式(BCNF) 
9.7 第四范式(4NF) 
9.8 第五范式(5NF) 
9.9 域-键范式(DKNF) 
9.10 规范化的实用技巧 
9.11 键类型 
9.11.1 自然键 
9.11.2 人工键 
9.11.3 对外暴露的物理定位器 
9.12 非规范化的实用技巧 
第10章 SQL的数值数据 
10.1 数值类型 
10.2 数值类型的转换 
10.2.1 数值的舍入和截断 
10.2.2 CAST()函数 
10.3 四则运算函数 
10.4 算术运算和NULL 
10.5 值与NULL的相互转换 
10.5.1 NULLIF()函数 
10.5.2 COALESCE()函数 
10.6 数学函数 
10.6.1 数学运算符 
10.6.2 指数函数 
10.6.3 标量函数 
10.6.4 将数值转换为文字 
10.7 唯一值生成器 
10.7.1 存有间隙的序列 
10.7.2 预分配数值 
10.8 IP地址 
10.8.1 CHAR(39)存储 
10.8.2 二进制存储 
10.8.3 使用多个单独的SMALLINT 
第11章 SQL中的时间数据类型 
11.1 关于日历标准的说明 
11.2 SQL时间数据类型 
11.2.1 时间的内部表示 
11.2.2 日期格式标准 
11.2.3 处理时间戳 
11.2.4 处理时间 
11.2.5 时区和夏令时 
11.3 INTERVAL数据类型 
11.4 时间算术 
11.5 时间数据模型的特性 
11.5.1 为持续时间建模 
11.5.2 持续时间之间的关系 
第12章 字符数据类型 
12.1 SQL字符串问题 
12.1.1 字符串相等问题 
12.1.2 字符串排序问题 
12.1.3 字符串分组问题 
12.2 标准字符串函数 
12.3 常见的厂商扩展 
12.4 Cutter表 
12.5 嵌套替换 
第13章 NULL:SQL中的缺失数据 
13.1 空表和缺失表 
13.2 列中的缺失值 
13.3 上下文和缺失值 
13.4 比较NULL 
13.5 NULL和逻辑 
13.5.1 子查询谓词中的NULL 
13.5.2 逻辑值谓词 
13.6 算术中的NULL值 
13.7 函数中的NULL值 
13.8 NULL和宿主语言 
13.9 NULL的设计忠告 
13.10 关于多NULL值的说明 
第14章 多列数据元素 
14.1 距离函数 
14.2 在SQL中存储IPv4地址 
14.2.1 使用单个VARCHAR(15)列表示IPv4地址 
14.2.2 使用一个INTEGER列表示IPv4地址 
14.2.3 使用四个SMALLINT列表示IPv4地址 
14.3 在SQL中存储IPv6地址 
14.4 货币与其他单位的转换 
14.5 社会安全号 
14.6 有理数 
第15章 表操作 
15.1 DELETE FROM语句 
15.1.1 DELETE FROM子句 
15.1.2 WHERE子句 
15.1.3 根据辅助表中的数据执行删除 
15.1.4 在相同表内进行删除 
15.1.5 不用声明引用完整性在多个表中进行删除 
15.2 INSERT INTO语句 
15.2.1 INSERT INTO子句 
15.2.2 插入的性质 
15.2.3 批量装载和卸载实用程序 
15.3 UPDATE语句 
15.3.1 UPDATE子句 
15.3.2 WHERE子句 
15.3.3 SET子句 
15.3.4 利用第二张表进行更新 
15.3.5 在UPDATE中使用CASE表达式 
15.4 常见厂商扩展的缺陷说明 
15.5 MERGE语句 
第16章 比较或theta操作 
16.1 数据类型转换 
16.1.1 日期显示格式 
16.1.2 其他显示格式 
16.2 SQL中的行比较 
16.3 IS [NOT] DISTINCT FROM操作符 
第17章 值化谓词 
17.1 IS NULL谓词 
17.2 IS [NOT] {TRUE | FALSE | UNKNOWN}谓词 
17.3 IS [NOT] NORMALIZED谓词 
第18章 CASE表达式 
18.1 CASE表达式 
18.1.1 COALESCE()和NULLIF()函数 
18.1.2 带GROUP BY的CASE表达式 
18.1.3 CASE、CHECK()子句和逻辑蕴涵 
18.2 子查询表达式和常量 
18.3 Rozenshtein特征函数 
第19章 LIKE与SIMILAR TO谓词 
19.1 使用模式的技巧 
19.2 NULL值和空字符串的谓词结果 
19.3 LIKE并不是相等 
19.4 用联结消除LIKE谓词 
19.5 CASE表达式和LIKE搜索条件 
19.6 SIMILAR TO谓词 
19.7 字符串的有关技巧 
19.7.1 字符串的字符内容 
19.7.2 搜索与声明一个串 
19.7.3 创建字符串中的索引 
第20章 BETWEEN和OVERLAPS谓词 
20.1 BETWEEN谓词 
20.1.1 NULL值的结果 
20.1.2 空集的结果 
20.1.3 程序设计技巧 
20.2 OVERLAPS谓词 
第21章 [NOT] IN()谓词 
21.1 优化IN()谓词 
21.2 用IN()谓词替换OR 
21.3 NULL和IN()谓词 
21.4 IN()谓词和引用约束 
21.5 IN()谓词和标量查询 
第22章 EXISTS()谓词 
22.1 EXISTS和NULL 
22.2 EXISTS和INNER JOIN 
22.3 NOT EXISTS和OUTER JOIN 
22.4 EXISTS()和量词 
22.5 EXISTS()和引用约束 
22.6 EXISTS和三值逻辑 
第23章 量化子查询谓词 
23.1 标量子查询比较 
23.2 量词和缺失数据 
23.3 ALL谓词和极值函数 
23.4 UNIQUE谓词 
23.5 DISTINCT谓词 
第24章 简单SELECT语句 
24.1 SELECT语句执行顺序 
24.2 单级SELECT语句 
第25章 高级SELECT语句 
25.1 关联子查询 
25.2 嵌入的INNER JOIN 
25.3 OUTER JOIN 
25.3.1 OUTER JOIN的一些历史 
25.3.2 NULL和OUTER JOIN 
25.3.3 NATURAL JOIN与搜索式OUTER JOIN 
25.3.4 OUTER JOIN自联结 
25.3.5 两次或多次OUTER JOIN 
25.3.6 OUTER JOIN和聚合函数 
25.3.7 FULL OUTER JOIN 
25.4 UNION JOIN操作符 
25.5 标量SELECT表达式 
25.6 旧JOIN语法与新JOIN语法 
25.7 受约束的JOIN 
25.7.1 库存和订单 
25.7.2 稳定的婚姻 
25.7.3 将球装入盒中 
25.8 Codd博士的T联结 
25.8.1 Stobbs方案 
25.8.2 Pieere方案 
25.8.3 参考文献 
第26章 虚拟表:视图、派生表、CTE及MQT 
26.1 查询中的视图 
26.2 可更新视图和只读视图 
26.3 视图的类型 
26.3.1 单表投影和限制 
26.3.2 计算列 
26.3.3 转换列 
26.3.4 分组视图 
26.3.5 联结视图 
26.3.6 视图的联结 
26.3.7 嵌套视图 
26.4 数据库引擎如何处理视图 
26.4.1 视图列列表 
26.4.2 视图物化 
26.4.3 内嵌文本扩展 
26.4.4 指针结构 
26.4.5 索引和视图 
26.5 WITH CHECK OPTION子句 
26.6 删除视图 
26.7 视图与临时表的使用提示 
26.7.1 使用视图 
26.7.2 使用临时表 
26.7.3 用视图扁平化表 
26.8 使用派生表 
26.8.1 FROM子句中的派生表 
26.8.2 包含VALUES构造器的派生表 
26.9 公用表表达式 
26.10 递归公用表表达式 
26.10.1 简单增量 
26.10.2 简单树遍历 
26.11 物化查询表 
第27章 在查询中分区数据 
27.1 覆盖和分区 
27.1.1 按范围分区 
27.1.2 单列范围表 
27.1.3 用函数进行分区 
27.1.4 按顺序分区 
27.1.5 使用窗口函数进行分区 
27.2 关系除法 
27.2.1 带余除法 
27.2.2 精确除法 
27.2.3 性能说明 
27.2.4 Todd的除法 
27.2.5 带JOIN的除法 
27.2.6 用集合操作符进行除法 
27.3 Romley除法 
27.4 RDBMS中的布尔表达式 
27.5 FIFO和LIFO子集 
第28章 分组操作 
28.1 GROUP BY子句 
28.2 GROUP BY和HAVING 
28.3 多层次聚合 
28.3.1 多级聚合的分组视图 
28.3.2 多层次聚合的子查询表达式 
28.3.3 多层聚合的CASE表达式 
28.4 在计算列上分组 
28.5 成对分组 
28.6 排序和GROUP BY 
第29章 简单聚合函数 
29.1 COUNT()函数 
29.2 SUM()函数 
29.3 AVG()函数 
29.3.1 空组的平均数 
29.3.2 多个列上的平均值 
29.4 极值函数 
29.4.1 简单的极值函数 
29.4.2 广义极值函数 
29.4.3 多条件极值函数 
29.4.4 GREATEST()和LEAST()函数 
29.5 LIST()聚合函数 
29.5.1 使用递归CTE的LIST聚合函数 
29.5.2 交叉表的LIST()函数 
29.6 PRD()聚合函数 
29.6.1 通过表达式实现PRD()函数 
29.6.2 通过对数实现PRD()聚合函数 
29.7 位运算符聚合函数 
29.7.1 OR位运算符聚合函数 
29.7.2 AND位运算符聚合函数 
第30章 高级分组、窗口聚合以及SQL中的OLAP 
30.1 星模式 
30.2 GROUPING操作符 
30.2.1 GROUP BY GROUPING SET 
30.2.2 ROLLUP 
30.2.3 CUBE 
30.2.4 SQL的OLAP示例 
30.3 窗口子句 
30.3.1 PARTITION BY子句 
30.3.2 ORDER BY子句 
30.3.3 窗口帧子句 
30.4 窗口化聚合函数 
30.5 序号函数 
30.5.1 行号 
30.5.2 RANK()和DENSE_RANK() 
30.5.3 PERCENT_RANK()和CUME_DIST() 
30.5.4 一些示例 
30.6 厂商扩展 
30.6.1 LEAD和LAG函数 
30.6.2 FIRST和LAST函数 
30.7 一点历史知识 
第31章 SQL中的描述性统计 
31.1 众数 
31.2 AVG()函数 
31.3 中值 
31.3.1 中值编程问题 
31.3.2 Celko第一中值 
31.3.3 Date第二中值 
31.3.4 Murchison中值 
31.3.5 Celko第二中值 
31.3.6 Vaughan提出的应用视图的中值 
31.3.7 使用特征函数的中值 
31.3.8 Celko第三中值 
31.3.9 Ken Henderson的中值 
31.3.10 OLAP中值 
31.4 方差和标准偏差 
31.5 平均偏差 
31.6 累积统计 
31.6.1 运行差分 
31.6.2 累积百分比 
31.6.3 序号函数 
31.6.4 五分位数和相关统计 
31.7 交叉表 
31.7.1 通过交叉联结建立交叉表 
31.7.2 通过外联结建立交叉表 
31.7.3 通过子查询建立交叉表 
31.7.4 使用CASE表达式建立交叉表 
31.8 调和平均数和几何平均数 
31.9 SQL中的多变量描述统计数据 
31.9.1 协方差 
31.9.2 皮尔森相关系数r 
31.9.3 多变量描述统计中的NULL值 
31.10 SQL:2006中的统计函数 
31.10.1 方差、标准偏差以及描述统计 
31.10.2 相关性 
31.10.3 分布函数 
第32章 子序列、区域、顺串、间隙及岛屿 
32.1 查找尺寸为n的子区域 
32.2 为区域编号 
32.3 查找最大尺寸的区域 
32.4 界限查询 
32.5 顺串和序列查询 
32.6 数列的求和 
32.7 交换和平移列表值 
32.8 压缩一列数值 
32.9 折叠一列数值 
32.10 覆盖 
第33章 SQL中的矩阵 
33.1 通过命名列进行访问的数组 
33.2 通过下标列进行访问的数组 
33.3 SQL的矩阵操作 
33.3.1 矩阵等式 
33.3.2 矩阵加法 
33.3.3 矩阵乘法 
33.3.4 矩阵转置 
33.3.5 行排序及列排序 
33.3.6 其他矩阵操作 
33.4 将表扁平化为数组 
33.5 比较表格式中的数组 
第34章 集合操作 
34.1 UNION和UNION ALL 
34.1.1 执行顺序 
34.1.2 混合使用UNION和UNION ALL操作符 
34.1.3 对同一表中的列执行UNION操作 
34.2 INTERSECT和EXCEPT 
34.2.1 没有NULL值和重复行时的INTERSECT和EXCEPT操作 
34.2.2 存在NULL值和重复行时的INTERSECT和EXCEPT操作 
34.3 关于ALL和SELECT DISTINCT的一个说明 
34.4 相等子集和真子集 
第35章 子集 
35.1 表中的每个第n项 
35.2 从表中选取随机行 
35.3 CONTAINS操作符 
35.3.1 真子集操作符 
35.3.2 表的相等操作 
35.4 序列间隙 
35.5 重叠区间的覆盖问题 
35.6 选取有代表性的子集 
第36章 SQL中的树和层次结构 
36.1 邻接列表模型 
36.1.1 复杂约束 
36.1.2 查询的过程遍历 
36.1.3 更改表 
36.2 路径枚举模型 
36.2.1 查找子树和节点 
36.2.2 找出层次和后代 
36.2.3 删除节点和子树 
36.2.4 完整性约束 
36.3 层次结构的嵌套集合模型 
36.3.1 计数特性 
36.3.2 包含特性 
36.3.3 下级节点 
36.3.4 层次聚合 
36.3.5 删除节点和子树 
36.3.6 将邻接列表转换为嵌套集合模型 
36.4 其他表现树和层次结构的模型 
第37章 SQL中的图 
37.1 邻接列表模型图 
37.1.1 SQL和邻接列表模型 
37.1.2 路径与CTE 
37.1.3 环状图 
37.1.4 邻接矩阵模型 
37.2 分割嵌套集合模型表示的图节点 
37.2.1 图中的所有节点 
37.2.2 路径端点 
37.2.3 可达节点 
37.2.4 边 
37.2.5 入度和出度 
37.2.6 源节点、汇聚节点、孤立节点和内部节点 
37.2.7 将无环图转化为嵌套集合 
37.3 多边形中的点 
37.4 图论参考书目 
第38章 时间查询 
38.1 时间数学 
38.2 个性化日历 
38.3 时间序列 
38.3.1 时间序列中的间隙 
38.3.2 连续时间段 
38.3.3 相邻事件中缺失的时间 
38.3.4 查找日期 
38.3.5 时间的起始点和结束点 
38.3.6 开始时间和结束时间 
38.4 儒略日 
38.5 其他时间函数 
38.6 星期 
38.7 在表中对时间建模 
38.8 日历辅助表 
38.9 2000年问题 
38.9.1 零 
38.9.2 闰年 
38.9.3 千年问题 
38.9.4 旧数据中的怪异日期 
38.9.5 后果 
第39章 优化SQL 
39.1 访问方法 
39.1.1 顺序访问 
39.1.2 索引访问 
39.1.3 散列索引 
39.1.4 位向量索引 
39.2 如何建立索引 
39.2.1 使用简单查询条件 
39.2.2 简单字符串表达式 
39.2.3 简单时间表达式 
39.3 提供额外信息 
39.4 谨慎建立多列索引 
39.5 考察IN谓词 
39.6 避免UNION 
39.7 联结胜于嵌套查询 
39.8 使用更少的语句 
39.9 避免排序 
39.10 避免交叉联结 
39.11 了解优化器 
39.12 在模式更改后重编译静态SQL 
39.13 临时表有时能带来方便 
39.14 更新统计数据 
39.15 不要迷信较新的特性 
参考文献 

章节摘录

版权页:   插图:   DECIMAL(p,s)也可以书写为DEC(p,S),不过SQL程序员并不使用这种缩写形式。例如,OECIMAL(8,2)可容纳数值123456.78,即8位有效数字和两位小数。 NUMERIC和DECIMAL之间的区别非常细微:NUMERIC指定了严格的精度和小数部分;DECIMAL则指定严格的小数部分,而精度则在执行时定义为等于或大于某个特定的值。这意味着DECIMAL类型需要提供更多的位数,以进行四舍五入操作,而NUMERIC类型则不需要。大型机COBOL程序员会把NUMERIC视为COBOL的PICTURE数值类型,而把DECIMAL看做BCD类型。不过现在的个人机程序员或许看不到这些了。 近似数值由尾数和指数组成。尾数是一个带符号数值;指数则是带符号整数,它指定了尾数的大小。近似数有一定的精度。其精度值为一个正整数,它指定尾数中有效二进制数的位数。近似数的值是尾数乘以10为底的指数。FLOAT(p)、REAL和DOUBLE PRECISION都是近似数类型。FLOAT(p)和REAL之间稍有不同,前者的二进制精度大于或等于指定值,而后者则是在运行时定义精度。 现实世界中,REAL和DOUBLE PRECISION类型均遵循IEEE 754标准中的浮点数标准。现在几乎没有SQL程序员会使用FLOAT(P)类型,该类型将来也许会被标准否决。IEEE标准的数学函数被嵌入到处理器芯片中,因此其运行速度超过了软件实现的运行速度。IEEE 754标准采用二进制表示,单精度为32位,双精度为64位,而这些精度正好适用于个人计算机和大多数Unix和Linux平台。 单精度数值的范围近似为±10^—44.85~10^38.53,双精度数值的范围近似为±10^—323.3~10^308.3。不过,IEEE标准中的某些特殊值并未包含在SQL内。 0不能直接用上述形式表示,它被描述为拥有一个零指数部分和一个零尾数部分的特殊值。加上符号部分构成—0或+0,这使得这两个值进行相等比较时结果为相等,但却是不同的值。如果指数部分为0,但尾数部分不为0(否则就视为零了),那么由于二进制小数点前必须包含1,因此该值是一个非规范数值(我们也可以将某些表称为非规范表,不过这两处的“非规范”一词含义不同)。这样的数值表示为—s*0f*2—126,其中s是符号位,f是尾数部分。对于双精度,非规范数值的格式为—s*0.f*—1022。可将0看做一种特殊的非规范数值。 “+∞”和“—∞”两个值表示为全1的指数和全0的尾数。符号位区别正无穷大和负无穷大。使用无穷大标识某一特殊值的做法非常有用,因为这样可使得运算在溢出情况下继续进行。IEEE浮点标准中也对无穷大值的运算进行了定义,而SQL中则未定义这类数值。 NaN(Not a Number,非数)通常用于表示不代表数值的位配置(bit confignration)。NaN由一个全1指数和一个非0尾数的位模式表示。有两类NaN,即QNaN(Quiet NaN,静态非数)和SNaN(Signalling NaN,动态非数)。

媒体关注与评论

“Joe Celko的这本书无疑已经成为每一位SQL程序员案头必备的权威指南。”“本书前几版我都看过,Joe Celko这本书的最大特点就是,一旦你读了开头,就不想停下来了。”——读者评论

编辑推荐

世界级数据库专家Joe Celko经典力作掌握高级技术,精通SQL编程的不二之选揭示SQL标准背后鲜为人知的理论与实践考量

图书封面

图书标签Tags

评论、评分、阅读与下载


    SQL权威指南(第4版) PDF格式下载


用户评论 (总计39条)

 
 

  •   sql权威专家写的书,内容很全面,质量也很好,值得购买
  •   经典著作,适合高级SQL开发人员阅读
  •   学习SQL Server必备之选
  •   没怎么看 感觉和ms sql 没什么关联。是理论方面的知识比较多。看看还成
  •   权威的书籍。质量很好。
  •   经典的书籍,要认真的研读!
  •   刚开了前两章,的确是经典
  •   书的内容很不错!翻了一下,很适合自己!
  •   内容很详细,讲的也全面
  •   比较实用!推荐使用
  •   先生买的,说非常不错,很全面
  •   可能是因为过年吧,快递送的有点晚。书本身的内容和质量还是不错的
  •   最好有实际的经验再看这本书
  •   收到货了,很好,我很喜欢
  •   好书不用多说,只要看作者就可以了
  •   刚收到,还没有看,但感觉应该 不错
  •   不错 是一笨好书
  •   送货速度快,书也非常好,满意
  •   没看 这书要慢慢看吧 以后有用的时候看
  •   在书店看到才网上买的,网上下载的电子书是英文的,看起来费力,还是买中文的好理解。
  •   书不错,参考书必备。
  •   第一眼我喜欢这本书,从封面上看。翻看目录看了下,个人觉得还好,这本书包括的很全面,作为一个SQL标准,它没有会说SQL Server 权威指南,没有说Oracle权威指南,没有说DB2权威指南。适合中高级的程序员,书中这样说。
  •   作为工具书的经典,个人认为应该是手头常备的。这本书不仅适合SQL Server,而且适合Oracel等数据库,换句话说,通过该书写的代码,可以很轻松移植到不同的数据库。推荐
  •   数据库是现在大量数据管理,必不可少的.所以想成为一个好的软件工程师就必须经过数据库的修行.
  •   说权威有些托大了,官方都没出呢,你算老几
  •   东西很好,送货很快,这本书的内容很充实详尽,感觉难度有点大!
  •   同事推荐的,果真不错!送货出货也快!
  •   书还行 做的真不敢恭维
  •   翻译得比较差,内容比较虚,学不到什么有用的,不推荐
  •   听很网友推荐这本书, 并且我也知道这本书的作者是个大牛. 但不得不吐槽的是, 这本书的翻译真是太屎了~~!! 很多术语的翻译都非常规, 而且句子让人读起来相当的难受. 让我有不小的失望, 但是没办法,还是得接着看, 唉.
  •   这本书,不是写给初学者看的,得有一定基础才能看得明白。应该说是SQL方面权威之选吧,内容深入,详细,全面,对提升SQL编程能力、理解SQL本质有很大的帮助。我现在只看了前几章,看着有点困难,但是收获还是蛮多的。个人觉得,对于想进一步提高自身的人员,非常值得一读。
  •   翻译的真是不敢恭维~一句话要读七八遍才能明白他说的是什么。。。。
  •   果然是权威书籍,内容很全。SQL设计各方面细节都写了,知其然也要知其所以然,好!
  •   刚刚拿到,纸张很次,像盗版的!看了一点,翻译相当垃圾,都想骂人!语句翻译的都不通顺,真行啊!
  •   英文原版图书书名本来是《高级SQL编程》,为什么中文书名要翻译成《SQL权威指南》呢?可能是出版社和译者为了提升销量故意这样翻译吧。感觉这样很容易对顾客形成误导。我不喜欢这样的翻译。
  •   可能我的基础不太好吧,看起来还是有点费劲
  •   初学者绝对看不懂,看的懂也是一知半懂,进阶者完全没必要看,垃圾书中的战斗机,买了就后悔了,不过亚马逊发货速度挺快的
  •   看SQL的高级应用来着
  •   一点都不权威错误太多了
 

250万本中文图书简介、评论、评分,PDF格式免费下载。 第一图书网 手机版

京ICP备13047387号-7