學習有的時候,真的需要找適合自己的書籍。
今天給大家推薦這本書,市面上其實已經沒有出版了,能買到的都是二手書或電子書。
它就是《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電子版。裡面有各個語法的解釋、大量的例項講解和批註等等,非常通俗易懂,方便大家跟著一起來實操。
有需要的讀者可以下載學習,關注我的Facebook,私訊關鍵字:SQL兩件套,就行~