推荐两本我学SQL的启蒙书籍

2021-04-14 00:00:00 查询 集合 执行 别名 上卷

点击关注上方“SQL数据库开发”,

设为“置顶或星标”,时间送达干货

SQL专栏

SQL基础知识第二版
SQL知识第二版

学习有的时候,真的需要找适合自己的书籍。

今天给大家推荐这本书,市面上其实已经没有出版了,能买到的都是二手书或电子书。
它就是《Microsoft SQL Server 2008技术内幕》上下卷:
Microsoft SQL Server 2008技术内幕:T-SQL语言基础
Microsoft SQL Server 2008技术内幕:T-SQL查询

上卷

下卷

刚工作的时候,公司用的是SQL Server的数据库,SQL知识还是比较薄弱的,会简单的CURD,还会点行转列之类的知识,勉勉强强可以应付工作上的一些需要。

随着需求的增加,越发感到力不从心,还好当时遇到的经理好心给我推荐了这两本书。一开始也就随便看看,越往后看越感到如获至宝。

《T-SQL语言基础》这本书特别适合像我这样的初学者,有点基础但是对于一些原理性的东西知之甚少。它从SQL语句的执行顺序开始讲起:
(8)SELECT (9)DISTINCT(11)<Top Num> <select list>
(
1)FROM [left_table]
(
3)<join_type> JOIN <right_table>
(
2)        ON <join_condition>
(
4)WHERE <where_condition>
(
5)GROUP BY <group_by_list>
(
6)WITH <CUBE | RollUP>
(
7)HAVING <having_condition>
(
10)ORDER BY <order_by_list> 

注:上面括号里的数字代表SQL的执行顺序

每一个阶段会做怎么样的数据处理也有详细的表述。

比如为什么在GROUP BY后面不能使用SELECT 后面列的别名?

原因就是GROUP BY发生在前,而别名是在SELECT阶段才会被执行,一个后执行的别名怎么能提前在GROUP BY后面使用呢?(注意:MySQL在GROUP BY后面可以使用别名,与SQL Server的执行逻辑有所区别)

此外其中让我印象非常深刻的是它的集合论:所有的查询均可以看作一个集合。

比如说我们经常遇到的两表关联查询


SELECT * FROM Customers c
JOIN Orders o ON  c.CustomerID=o.CustomerID


就可以理解成集合Customers中的CustomerID同时存在于集合Orders 里面,我们用图可以这样表示:


看到这里我就感觉突然豁然开朗了,特别是一些子查询,IN,EXISTS,UNION等等均可以看作是集合,我们写的所有查询其实都是在进行各种的集合运算。

上卷基本把我们日常工作中会用到的内容都讲到了,具体目录如下:


强烈推荐新手同学把上卷认真看完,好能够多看几遍,直到现在我也还会偶尔翻一下,加深记忆。

《T-SQL查询》这本主要讲述的如何提高SQL代码质量的一些内容,优化部分内容较多,对于想进一步提高SQL技能的也是非常实用的。

前面3章主要是回顾上卷的核心内容,后面的章节就是一些SQL高阶技能的具体阐述了,基本涵盖了查询过程中所有可能会遇到的知识点。

特别是查询优化章节写的非常好,我在工作中使用到的一些提高查询的方法大多都是来源于此。

以上就是这两本书的相关介绍了,有需要的小伙伴可以网上搜索一下。


后给大家分享我写的SQL两件套:《SQL基础知识第二版》《SQL知识第二版》的PDF电子版。里面有各个语法的解释、大量的实例讲解和批注等等,非常通俗易懂,方便大家跟着一起来实操。


有需要的读者可以下载学习,在下面的公众号「数据前线」(非本号)后台回复关键字:SQL,就行

数据前线


后台回复关键字:1024,获取一份精心整理的技术干货

后台回复关键字:进群,带你进入高手如云的交流群

相关文章