自《SQL实战》出版以来,本书受到了世界各地读者的广泛好评。有位读者满心欢喜地说,本书帮助他在面试过程中的SQL问答环节揽得高分。还有位教师则写信说到,学生对他在课程中布置阅读本书给予了好评。 至于其他人,则更多是觉得本书对他们有所帮助,又或者觉得本书读起来平易近人,而这两点反馈无疑对大多数作者来说都是非常暖心的。
当然,我有时候也会听到一些读者说他们在完成练习的过程中遇到了障碍,又或者遇到了软件或是数据文件方面的问题。我密切地关注这些邮件,特别是当相同问题反复出现的时候。与此同时,在我每天学习并应用SQL的过程中,我常常会发现一些新的技巧,并且希望将它们也包含书本里面。
考虑到上述原因,我向No Starch Press团队提出了更新《SQL实战》并将其扩展为第2版的想法,并且很欣慰地从他们那里得到了肯定的回复。更新之后的书本不仅更为完整,能够为软件和编码相关的读者提供更加强有力的指导,并且还澄清了以往某些不太清晰或者不太准确的信息。重新审视本书不仅让人感觉愉悦,更是一次满载而归的学习过程。
这本第2版包含大量更新、扩展以及对每一章的澄清,并且在整个过程中,我一直仔细地标注代码的语法是否符合SQL标准,又或者只适用于本书选用的PostgreSQL数据库:符合SQL标准的语法通常可以在不同的数据库系统中使用,而特定于PostgreSQL数据库的语法则不然。
以下列举了新版最为重要的一些变化:
第1章和第16章是新添加的。第1章《设置编码环境》详细介绍了如何在多个操作系统上安装PostgreSQL、pgAdmin以及附加的PostgreSQL组件,并展示了从GitHub获取代码清单和数据的具体方法。这些信息在第1版被放置在《导言》里面,它们有时候会被读者忽略。第16章《处理JSON数据》以电影和地震的数据集为例,展示了PostgreSQL对JavaScript Object Notation数据格式的支持。
讲述数据类型的第4章添加了关于IDENTITY
的一节,这一类型是自动递增整数列的ANSI SQL标准实现。新版整书都使用IDENTITY
,以此来代替旧版中PostgreSQL特有的自动递增整数类型serial
,从而使得代码示例能够更为符合SQL标准。
讲述数据导入和导出的第5章添加了关于 WHERE
关键字和 COPY
命令的一节,它们用于筛选需要从源文件导入到表的行。
讲述基本数学知识的第6章移除了旧版中用户自定义的median()
函数,改为使用SQL标准的percentile_cont()
函数以计算中位数。
讲述表连接的第7章新添加了一节以涵盖集合操作UNION
、UNION ALL
、INTERSECT
和EXCEPT
。此外,该章还添加了一节以涵盖连接中的USING
子句,它可以减少冗余输出并简化查询语法。
讲述检视和修改数据的第10章新添加了一节,展示了在使用UPDATE
语句修改数据时,如何通过RETURNING
关键字返回被修改的数据。本章还添加了一节,用于描述如何通过TRUNCATE
命令删除表中的所有行并重新开始一个IDENTITY
序列。
讲述统计函数的第11章新添加了一节,用于展示如何通过创建滚动平均数以平滑不均匀的数据,从而更好地了解一段时间内的趋势。此外还增加了一些内容,用于介绍计算标准差和方差的函数。
讲述高级查询技巧的第13章现在会展示如何在子查询中使用LATERAL
关键字。这样做的一个好处是,通过组合LATERAL
和JOIN
,你能得到与编程语言的for循环类似的功能。
讲述空间数据分析的第15章展示了如何通过pgAdmin的几何图形查看器,在地图上查看指定的地理位置。这一功能是pgAdmin在本书第一版发布之后新增的。
讲述视图、函数和触发器的第17章新添加了关于物化视图的信息,并展示了物化视图和标准视图之间的行为区别。鉴于PostgreSQL现在除了函数之外还新增了对过程(procedure)的支持,所以本章也对过程做了介绍。
最后,书中涉及的数据已经尽可能地更新到了写作时的最新版本。其中主要体现在美国人口普查的统计数据,还有总统的演讲稿以及图书馆的使用统计数据。
感谢你阅读《SQL实战》!如果你有任何问题或者反馈,请通过邮件与我取得联系:practicalsqlbook@gmail.com。