译者序

译者序

我曾在日本从事多年软件开发工作,工作中经常会跟各种数据库打交道,编写 SQL 代码也是常有的事情。但是对于 SQL 语言,当时也只是通过大学里的一门讲授数据库系统的课程了解了基本的语法,在工作中积累了一些实用的经验而已,并没有进行过非常深入的研究。于是我便打算找一本深入一些的书,最好是面向有一定编程经验的读者的,系统地学习一下。

后来我在书店遇见了 MICK 先生的这本书,翻看前言,尝试了他提出的检验读者水平的若干问题。非常遗憾,我只能回答出很少的几个,于是我便认为这本书正是我需要的,当场决定买下了。

几年过去,我由于个人原因回国了,工作中也不再使用日语,便想着借着业余时间翻译一些优秀的日语技术书。当图灵公司的老师问我是否有意向翻译这本书时,我立刻就答应了。当初回国时为了缩减行李,我只保留了几本日语原版的技术书,这本就是其中之一。这样一本多年前结缘、至今仍躺在我书架上的好书,当有机会将它翻译成中文版时,我实在没有什么理由放弃掉。

这本书,我认为是作者的用心之作。书中大部分内容都来自作者记录自己实践总结和日常思考的个人博客,最大的特点是理论与实践相结合,除了讲述应该怎么做,还解释了其背后的原理。全书包含两部分内容,第一部分介绍了 SQL 在使用方面的一些技巧,第二部分介绍了关系数据库相关的内容。第一部分在介绍 SQL 的技巧时,作者并没有上来就展示各种酷炫的招式,而是先以简单的问题或者例题引出将要讨论的内容,在讲解之后进一步扩展,由点及面地引出更深的话题或者背后的原理。这种由浅入深的讲述方式,符合一般的学习习惯,读者能在轻松愉悦的阅读过程中,跟着作者一起思考,自然而然地掌握相应的思考方式。第二部分在介绍关系数据库时,作者先介绍了关系数据库诞生的历史背景及其解决的问题。关系数据库已经诞生了几十年,为了让现在的读者理解当初的问题和背景,作者大量引用了关系数据库之父 E.F. Codd 和关系数据库领域权威专家 C.J. Date 的文献和言论,并按自己的理解给出了分析与解释,力图使读者体会到伟大人物们在革新技术之际的心路历程。除此之外,第二部分中作者还从逻辑学和集合论的角度讲述了 SQL 和关系模型的理论基础。该部分内容作者充分发挥了自己在相关领域的深厚积累,以深入浅出的方式进行了阐述,我认为非常精彩。

书中引用了许多经典的图书和文献,都在脚注和书末参考文献中给出了详细的出处,方便有需要的读者进一步研读。更加可贵的是,在大多数小节的末尾作者都提出了两三个精心设计的小问题,这些问题是正文内容的扩展和延伸,非常利于读者巩固相应的知识点。而且,针对这些问题,作者也给出了详细的解答,并指出了读者容易犯的错误。

本书推荐数据库工程师、经常需要和数据库打交道的软件工程师,以及所有希望提升 SQL 水平的读者阅读。在翻译过程中,我尽力表达出原著的意图,但是由于水平有限,难免存在问题,欢迎读者批评指正。读者在阅读中有任何问题,都可以通过电子邮件和我取得联系(ensho_go@hotmail.com)。

 

2017 年 9 月

于北京

目录

  • 版权声明
  • 译者序
  • 前言
  • 阅读本书时的注意事项
  • 第 1 章 神奇的SQL
  • 1-1 CASE表达式
  • 1-2 自连接的用法
  • 1-3 三值逻辑和 NULL
  • 1-4 HAVING子句的力量
  • 1-5 外连接的用法
  • 1-6 用关联子查询比较行与行
  • 1-7 用 SQL 进行集合运算
  • 1-8 EXISTS 谓词的用法
  • 1-9 用 SQL 处理数列
  • 1-10 HAVING子句又回来了
  • 1-11 让SQL飞起来
  • 1-12 SQL编程方法
  • 第 2 章 关系数据库的世界
  • 2-1 关系数据库的历史
  • 2-2 为什么叫“关系”模型
  • 2-3 开始于关系,结束于关系
  • 2-4 地址这一巨大的怪物
  • 2-5 GROUP BY和PARTITION BY
  • 2-6 从面向过程思维向声明式思维、面向集合思维转变的 7 个关键点
  • 2-7 SQL 和递归集合
  • 2-8 人类的逻辑学
  • 2-9 消灭 NULL 委员会
  • 2-10 SQL中的层级
  • 第 3 章 附录
  • 3-1 习题解答
  • 3-2 参考文献
  • 后记