摘自译者序
这本书有以下几方面的特点:
实用。这不是一本关于SQL的教程,而是针对实际应用的需求提出了一百多个普遍性问题的解决方案,其中大部分都是从作者的日常实践中提炼出来的。有一定经验的SQL开发人员会发现,对其中大多数问题自己都曾经有过类似的需求,将这里的解决方案跟自己的做法对比一下一定会有所启发;对SQL新手而言,有了这本书就可以避免前人的探索过程,因为巨人已经给你准备好了肩膀。当然,实用并不是说其中的代码拿来就可以直接用,关键是其中的方法、技巧,有时书中的问题看似跟你的实际需要毫不相干,但其解决方案也有可能让你产生灵感,找到解决问题的途径。
富有创造性。从很多问题的解决方案中可以看出作者的创造性。例如求累积乘,译者一看到标题就感到疑惑,因为SQL中并没有类似SUM这样求乘积的聚集函数,译者过去碰到这样的需求都是用SQL把相关数据取出来,然后用其他语言老老实实地将各行的数据一个个乘起来,看看书中的解决方案,原来道理很简单,初中就学过,但恐怕不是每个人都会想到的。如果能从书中学到点创造性思维方式,那收获就太大了。
分析深入。该书每个问题的解决方案之后都有讨论部分。讨论中分析了SQL中各部分的作用,得到什么结果,为什么会有这样的结果,很多地方揭示了隐藏在SQL语句背后的实质,例如各子句的处理顺序。译者曾经不止一次有过这样的经历:测试中发现SQL查询结果总是跟预期想左,怎么也看不出来所以然,怎么也看不出来所以然,不得已只好绕道,使用其他方法。如果译者早度过这本书,情况恐怕就不一样了。另外,新手看到比较长的SQL语句往往会心里发毛,这本书的讨论中(特别是后面几章)会把复杂的SQL分解开,从最简单的形式一步步引向最终解决方案。相信这样的分析方法一定会让读者有所裨益的。
针对多种平台。本书中为每个问题提供了针对五中RDBMS的解决方案(14章除外),其中也有许多问题是多个平台使用同一个方案,因为这些平台的有关特性相同或十分相似。当然,跟很多平台相对的就是可移植性问题,这主要取决于个人偏好,当然,更主要是实际应用的需要,不可一概而论。