
本书不会涉及的内容
由于时间和篇幅限制,一本书无法囊括你可能实际遇到的所有SQL 问题及其解决办法。以下是本书不会涉及的内容。
•数据定义。本书不会涉及诸如创建索引、添加约束、加载数据等SQL 操作,这一类操作的语法多数会因数据库的不同而呈现出较大差异,因此你最好多参考官方手册。另外,这类任务的难度还没有达到那种需要专门买一本书来寻求解决方案的程度。尽管如此,第4章还是提供了一些涉及数据的插入、更新和删除等常见问题的实例。
•XML。我一向认为,与XML 相关的例子不应该出现在SQL 书里。把XML 文档存入关系数据库正变得越来越常见,以至于许多关系数据库管理系统都提供了专有的扩展和工具帮助大家获取和处理XML 数据。处理XML 通常需要一些过程化的程序代码,因此不在本书讨论范围之内。XQUERY 等技术完全独立于SQL,应该会有专门讲解这一类技术的书。
•SQL 的面向对象扩展。除非出现更适合处理对象的语言,否则我不赞成在关系数据库里使用面向对象特性和设计。当前一些数据库实现了部分面向对象特性,不过它们更适用于过程化程序设计,而非SQL 固有的面向集合的问题解决方式。
•理论层面的争论。你不会在本书中看到诸如SQL 是不是关系型编程语言,或者Null是否应该存在等这一类观点。我把注意力集中在来自真实世界的SQL 实例上,理论层面的讨论不见于本书。要解决一个问题,你必须对现有的工具善加利用。你只能拥抱现有的一切,而不应该对那些可望不可及的东西念念不忘。

如果你希望学习更多理论知识,Chris Date的“关系数据库论文集”系列里的任何一本书都会是一个非常好的起点。你也可以去读他的著作《深度探索关系数据库》。
•数据库优劣之争。本书提供的实例兼顾5种关系数据库管理系统。你自然想知道哪种数据库提供的方案最好或最快。每一家数据库厂商都能给出足够多的资料来证明自己的产品才是最好的,我不想在这里论及此事。
•数据库标准之争。许多书都有意回避不同数据库厂商提供的专有函数,本书却热情拥抱这些专有函数。我不会仅仅出于对可移植性的考虑去写一些复杂低效的SQL 代码。我从来没有见过哪一家公司明令禁止使用专有的扩展。你付钱买了这些特性,为什么不善用它们?
数据库厂商的专有扩展之所以存在,自有其原因。相较于标准SQL,专有扩展往往能提供更高的执行效率和更强的代码可读性。如果你喜欢写完全符合ANSI 标准的代码,那也很好。正如我之前提到的,我并不是要你去将现有代码改个底朝天。如果你的代码严格符合ANSI 标准并且工作得很好,那也很棒。归根结底,我们都要工作,都要支付账单,并且都想早点下班回家以享受每天的剩余时光。因此,我并不是在暗示纯标准化的做法有问题。让代码跑起来才是最重要的事。但是,我需要声明,如果你在寻找纯标准化的解决方案,那就不应该阅读本书。
•遗留系统之争。本书提供的实例用到了写作本书时已经可用的数据库新特性。如果你还在使用某些旧版本的关系数据库管理系统,我提供的解决方案有许多可能都无法适用。技术不会停滞不前,你也不应该墨守成规。如果你需要找到针对旧版关系数据库管理系统的解决方案,可以翻翻多年前的SQL 书,它们已经提供了足够多的例子。