SQL进阶教程(第2版)
上QQ阅读APP看书,第一时间看更新

前言

距离本书第 1 版发行已经过去 10 年。当时,笔者是首次写书,完全不知道该如何通过写作来表达自己的见解。幸运的是,该书得到众多好评,成为一本长销的SQL图书。多亏大家的支持,才有了这次的修订,所以首先要感谢大家给我第 2 次机会。

本书之所以长销,最大的原因就是关系数据库和SQL的寿命较长。虽然 NoSQL等数据库也兴盛起来,但关系数据库对许多系统的持久层来说仍然是首选。SQL不但未被淘汰,反而凭借其直观、优秀的接口利器,延伸到了专业程序员和工程师之外的终端用户。不过,SQL在这 10 年中也发生了巨大的变化。现在的SQL不仅要处理之前难以想象的大量数据,而且其相应的分析业务也不再是一小部分专家的任务。为了满足时代需求,SQL的功能也大幅增加。本书第 2 版跟随这种新趋势,针对现代SQL编程进行了更新。特别是第 1 版中因 DBMS 支持不足而未广泛使用的窗口函数,在第 2 版中也得到了全面使用。

针对没有读过第 1 版的读者,笔者概括说明一下本书的主旨,那就是“中级SQL编程入门”。本书的目标读者是在实际工作中有半年到一年SQL编程经验的人。说得更直接一点,就是试着读过乔 · 塞尔科的《SQL权威指南》1,但是最终放弃了的人(本书第 1 版中的一些内容原本也是对该书部分内容的详细解读)。

1 原书名为 Joe Celko'sSQLfor Smarties: AdvancedSQLProgramming,共有 5 版,国内引进了第 4 版,书名为《SQL权威指南(第 4 版)》,王渊、钟鸣、朱巍译,人民邮电出版社 2013 年出版。——编者注

本书会介绍SQL的诸多工具,如 CASE 表达式、窗口函数、外连接、关联子查询、HAVING 子句和 EXISTS 谓词等。如果读者能大致掌握或者使用过这些基本语法,就能够流畅阅读本书。在本书的第 1 章中,每节都会介绍一种SQL工具,并通过案例介绍这种工具便利的使用方法。请大家在学习时务必实际动手执行一下书中的示例代码。大家可以从前往后依次阅读,也可以跳过已经了解的章节或从自己感兴趣的章节开始阅读。

另外,本书的目标读者中还包含了另一类人,那就是与个人水平无关,只是想知道“SQL是什么”的读者。这样说可能有点奇怪,但实际上,SQL是一种“不可思议”的语言。一些初学者认为SQL就是一种能够轻松实现简单操作的便捷语言,但稍微深入理解之后,就会发现它的不可思议之处,比如出现难以理解的语言规范,或者要实现复杂的操作时,语法变得非常复杂。为什么关于 NULL 的SQL操作会如此混乱?为什么像使用关联子查询进行行间比较这么难的语法是必不可少的?为什么没有像面向过程语言中的循环和变量那样的便捷工具?为什么在SQL中想表达“所有的”会这么难呢?……

如果对于这些疑问,有的人基于一定程度上的理解,认为“就是这样的”,那也无可厚非。实际上,虽然许多工程师和程序员对SQL怀有不满,但仍然会使用它。他们认为虽然深入使用SQL会很麻烦,但如果“保持适当的距离”,SQL在工作上还是一个很好的帮手的。不过,有些人也想详细了解自己所使用的工具。对于这类读者,本书将充分满足其好奇心,书中介绍了许多背景知识,如SQL的原理和发明SQL的人是如何将其创建成现在这种形式的。本书的第 2 章会回答关于SQL语言本体的一些疑问。当然,笔者不敢断言能够解答所有的疑问,但本书提及的内容会帮助大家理解SQL语言的本质。

诚然,本书能够帮助大家提升SQL编程水平,但笔者还是希望能够让大家感受到探查编程语言这种文化产物的乐趣。

欢迎大家来到不可思议又有趣的SQL世界。

运行环境

本书中出现的SQL语句原则上都是按照标准SQL(SQL:2003)来写的。因此,主流 DBMS 的最新版都可以执行(几乎所有的)示例代码。对于一些依赖具体数据库实现的地方,本书会有明确的说明。

示例代码在以下的 DBMS 中运行确认过。

● Oracle Database 12cR2

● PostgreSQL10.3

● MySQL8.0.2

本书的SQL语句省略了指定表的别名的关键字 AS。这是为了避免SQL程序在 Oracle 数据库中出错。在其他的 DBSM 中,省略了 AS 也不会出错。

关于本书第 1 版

2017 年出版的《SQL进阶教程》是根据日本翔泳社面向开发者开设的网络媒体 CodeZine 上连载的以下内容编辑而成的。

● 《SQL进阶教程》(2006 年 6 月—2007 年 7 月)

笔者从整体出发重新审视并更新第 1 版的内容,由此产生了本书第 2 版。除上述内容之外的知识点和参考文献都会在书中标明。

下载配套资料

本书的配套资料(示例代码)可以从下面的网址下载。

ituring.cn/book/2724(点击页面中的“随书下载”)

本书中出现的主要人物

本书中会频繁提及一些人物。即使不知道他们,也不会对理解内容产生影响,不过作为预备知识,笔者还是先简单说明一下相关内容。

● 埃德加 · 弗兰克 · 科德(E. F. Codd,1923—2003):1969 年在 IBM 工作时,提出了成为关系数据库和SQL原型的关系模型理论,被誉为“关系数据库之父”。

● C. J. 戴特(C. J. Date,1941— ):与科德是好朋友,是致力于关系数据库发展的技术咨询工程师,还编写了一些优秀的教材。

● 乔 · 塞尔科(Joe Celko,1947— ):专门研究关系数据库和SQL的技术咨询工程师,撰写了关于SQL的经典力作《SQL权威指南》。笔者曾使用他撰写的书来学习SQL。