- SQL進階教程(第2版)
- (日)MICK
- 1931字
- 2024-06-20 10:55:48
前言
距離本書第 1 版發行已經過去 10 年。當時,筆者是首次寫書,完全不知道該如何通過寫作來表達自己的見解。幸運的是,該書得到眾多好評,成為一本長銷的SQL圖書。多虧大家的支持,才有了這次的修訂,所以首先要感謝大家給我第 2 次機會。
本書之所以長銷,最大的原因就是關系數據庫和SQL的壽命較長。雖然 NoSQL等數據庫也興盛起來,但關系數據庫對許多系統的持久層來說仍然是首選。SQL不但未被淘汰,反而憑借其直觀、優秀的接口利器,延伸到了專業程序員和工程師之外的終端用戶。不過,SQL在這 10 年中也發生了巨大的變化。現在的SQL不僅要處理之前難以想象的大量數據,而且其相應的分析業務也不再是一小部分專家的任務。為了滿足時代需求,SQL的功能也大幅增加。本書第 2 版跟隨這種新趨勢,針對現代SQL編程進行了更新。特別是第 1 版中因 DBMS 支持不足而未廣泛使用的窗口函數,在第 2 版中也得到了全面使用。
針對沒有讀過第 1 版的讀者,筆者概括說明一下本書的主旨,那就是“中級SQL編程入門”。本書的目標讀者是在實際工作中有半年到一年SQL編程經驗的人。說得更直接一點,就是試著讀過喬 · 塞爾科的《SQL權威指南》1,但是最終放棄了的人(本書第 1 版中的一些內容原本也是對該書部分內容的詳細解讀)。
1 原書名為 Joe Celko'sSQLfor Smarties: AdvancedSQLProgramming,共有 5 版,國內引進了第 4 版,書名為《SQL權威指南(第 4 版)》,王淵、鐘鳴、朱巍譯,人民郵電出版社 2013 年出版。——編者注
本書會介紹SQL的諸多工具,如 CASE
表達式、窗口函數、外連接、關聯子查詢、HAVING
子句和 EXISTS
謂詞等。如果讀者能大致掌握或者使用過這些基本語法,就能夠流暢閱讀本書。在本書的第 1 章中,每節都會介紹一種SQL工具,并通過案例介紹這種工具便利的使用方法。請大家在學習時務必實際動手執行一下書中的示例代碼。大家可以從前往后依次閱讀,也可以跳過已經了解的章節或從自己感興趣的章節開始閱讀。
另外,本書的目標讀者中還包含了另一類人,那就是與個人水平無關,只是想知道“SQL是什么”的讀者。這樣說可能有點奇怪,但實際上,SQL是一種“不可思議”的語言。一些初學者認為SQL就是一種能夠輕松實現簡單操作的便捷語言,但稍微深入理解之后,就會發現它的不可思議之處,比如出現難以理解的語言規范,或者要實現復雜的操作時,語法變得非常復雜。為什么關于 NULL
的SQL操作會如此混亂?為什么像使用關聯子查詢進行行間比較這么難的語法是必不可少的?為什么沒有像面向過程語言中的循環和變量那樣的便捷工具?為什么在SQL中想表達“所有的”會這么難呢?……
如果對于這些疑問,有的人基于一定程度上的理解,認為“就是這樣的”,那也無可厚非。實際上,雖然許多工程師和程序員對SQL懷有不滿,但仍然會使用它。他們認為雖然深入使用SQL會很麻煩,但如果“保持適當的距離”,SQL在工作上還是一個很好的幫手的。不過,有些人也想詳細了解自己所使用的工具。對于這類讀者,本書將充分滿足其好奇心,書中介紹了許多背景知識,如SQL的原理和發明SQL的人是如何將其創建成現在這種形式的。本書的第 2 章會回答關于SQL語言本體的一些疑問。當然,筆者不敢斷言能夠解答所有的疑問,但本書提及的內容會幫助大家理解SQL語言的本質。
誠然,本書能夠幫助大家提升SQL編程水平,但筆者還是希望能夠讓大家感受到探查編程語言這種文化產物的樂趣。
歡迎大家來到不可思議又有趣的SQL世界。
閱讀本書時的注意事項
運行環境
本書中出現的SQL語句原則上都是按照標準SQL(SQL:2003)來寫的。因此,主流 DBMS 的最新版都可以執行(幾乎所有的)示例代碼。對于一些依賴具體數據庫實現的地方,本書會有明確的說明。
示例代碼在以下的 DBMS 中運行確認過。
● Oracle Database 12cR2
● PostgreSQL10.3
● MySQL8.0.2
本書的SQL語句省略了指定表的別名的關鍵字 AS
。這是為了避免SQL程序在 Oracle 數據庫中出錯。在其他的 DBSM 中,省略了 AS
也不會出錯。
關于本書第 1 版
2017 年出版的《SQL進階教程》是根據日本翔泳社面向開發者開設的網絡媒體 CodeZine 上連載的以下內容編輯而成的。
● 《SQL進階教程》(2006 年 6 月—2007 年 7 月)
筆者從整體出發重新審視并更新第 1 版的內容,由此產生了本書第 2 版。除上述內容之外的知識點和參考文獻都會在書中標明。
下載配套資料
本書的配套資料(示例代碼)可以從下面的網址下載。
ituring.cn/book/2724(點擊頁面中的“隨書下載”)
本書中出現的主要人物
本書中會頻繁提及一些人物。即使不知道他們,也不會對理解內容產生影響,不過作為預備知識,筆者還是先簡單說明一下相關內容。
● 埃德加 · 弗蘭克 · 科德(E. F. Codd,1923—2003):1969 年在 IBM 工作時,提出了成為關系數據庫和SQL原型的關系模型理論,被譽為“關系數據庫之父”。
● C. J. 戴特(C. J. Date,1941— ):與科德是好朋友,是致力于關系數據庫發展的技術咨詢工程師,還編寫了一些優秀的教材。
● 喬 · 塞爾科(Joe Celko,1947— ):專門研究關系數據庫和SQL的技術咨詢工程師,撰寫了關于SQL的經典力作《SQL權威指南》。筆者曾使用他撰寫的書來學習SQL。
- Mastering Ninject for Dependency Injection
- 文本挖掘:基于R語言的整潔工具
- 大數據:規劃、實施、運維
- 算法與數據中臺:基于Google、Facebook與微博實踐
- 數據庫應用基礎教程(Visual FoxPro 9.0)
- 數據革命:大數據價值實現方法、技術與案例
- PostgreSQL指南:內幕探索
- 大數據分析:數據倉庫項目實戰
- 菜鳥學SPSS數據分析
- The Natural Language Processing Workshop
- 區塊鏈應用開發指南:業務場景剖析與實戰
- Oracle 內核技術揭密
- 數據挖掘與數據化運營實戰:思路、方法、技巧與應用
- Tableau商業分析從新手到高手(視頻版)
- Configuration Management with Chef-Solo