“SQL 被低估了!”
一直以來,結構化查詢語言 SQL 憑藉著快速、無需編碼、可移植性、明確界定標準等特性深受開發者喜愛。且自從被加入 TIOBE 程式語言排行榜以來,SQL 就一直保持在 Top 10 的範圍內。
對此,你怎麼看?

“SQL 被低估了!”
以下為譯文:
在我的職業生涯中我學習了很多技術,但是我覺得最實用的技術當屬 SQL。對我來說,SQL 是最有價值的技術,原因有以下幾個方面:
- SQL 在不同的職責和學科中都很有價值。
- 只需學習一次,一勞永逸。
- 你可以成為超級英雄。掌握這門技術,會讓你變得非常強大,因為很多人都沒能熟練掌握這門技術。
SQL 是一個可以隨處使用的工具
無論你的職責是什麼,你都可以通過 SQL 讓你工作變得更輕鬆。目前作為一名產品經理,我的工作重心在於檢視資料、分析我們在產品方面的影響以及塑造產品規劃藍圖。如果我們剛剛釋出了一個新功能,那麼相關的資料(比如是否有人檢視這個功能等)可能都儲存在關係資料庫中。如果我正在追蹤一些關鍵性的指標(例如月度增長),那麼很可能這些資料也儲存在關係資料庫中。另外,我們所有的工作(例如系統記錄)都需要使用 SQL。掌握如何使用 SQL 可以為我節省大量的工作,因為我無需向他人詢問具體的數字。
但是,即使在成為產品經理之前,我也會使用 SQL 來了解系統內部的情況。作為一名工程師,通常我可以通過 SQL 更快地獲取我想要的資訊,而無需使用 Ruby 或 Python 編寫指令碼。當我的 webapp 變得非常遲緩時,我必然需要了解其所執行的 SQL 以及優化的方法。當然,這遠遠超出了對 SQL 基本的理解……但是為查詢新增索引就可以解決問題,而無需增加快取,這還是非常值得花費額外的時間學習。
SQL 的知識具有永續性
我記得大約在20年前,我建立了第一個網頁。我感覺非常欣喜,還加入了一些 Javascript 來強化頁面,提示使用者點選是/否或提供一些輸入。後來,大約在10年前,jQuery 問世了,雖然有時它很冗長,但是學習新功能可以讓頁面整體上更加美觀,所以我重新學習了 JS 的 jQuery 方法。再到後來,Angular - > React / Ember 相繼出現,現在為了將基本的 Javascript 引入我的網站,我需要一整套的流程,而現實情況是我所做的仍然只是讓使用者點選是/否——與20年前一樣。
相反,SQL 卻沒有太多改變。雖然它已經發生了改變——成為了現代的 SQL,但是我仍然認為與其他技術相比,這點變化幾乎微不足道。沒錯,每隔幾年就會一個新的標準問世,偶爾還有新的內容(比如支援視窗函式或CTE),但是 SQL 的基礎知識始終如一。只需學習一次 SQL,你就可以在工作中反覆使用,而無需重新學習。請不要誤會,我喜歡學習新的東西,但我寧願學習一些真正的新東西,而不僅僅是完成同樣任務的另一種方法。
SQL 的獨一無二
大多數應用程式開發人員都未能熟練地掌握 SQL,他們沒有認真學習這項技術。正因為真正掌握 SQL 的人非常少,所以可能你看起來更加出眾。我原來的公司擁有數百名的工程師,每週都有好多人(從初級工程師到高階首席工程師)來問我:“你能幫我看看這個查詢該怎麼寫嗎?”因為你掌握了某項很少人掌握的技術,所以你可以幫助別人,而當你遇到困難需要他們幫助時,他們也會義不容辭。
如果你還未能精通 SQL 的話,或許可以馬上行動起來。
你怎麼看?
對此,網友們也各抒己見:
評論1:
SQL 是我見過的最令人歎為觀止的一個概念。它有將近五十年的歷史,而且沒有絲毫要被取代的跡象。我們創造無數的其他技術來儲存和處理資料,但似乎我們總是在設法利用這些技術(例如 Hive,Presto,KSQL等)重建 SQL。
我在經營一家創業公司,為客戶構建分析基礎架構。我們非常重視 SQL,而本文的內容非常真實。
與普通的軟體工程師相比,分析師和資料科學家在工作中編寫的 SQL 越來越多。
MMP 資料倉庫(redshift,bigquery,snowflake等)的出現,使得即使預算有限的公司也能夠使用 SQL 來儲存和查詢大量資料。SQL 比以往任何時候都更強大,更有價值。
如果注意觀察某個普通的企業,你會發現大多數軟體工程師都不擅長 SQL。他們怎麼能這樣?大多數複雜查詢都是分析查詢。ORM 可以處理應用程式程式碼需要處理的大多數基本功能。
但是,本文沒有提到一點:許多後臺的工程師已經抽象出了 SQL,當然還有前端和移動。所以即便你不太瞭解 SQL 也可以成為一名優秀的開發人員。
另一方面,擁有初級或中級分散式檔案系統、流媒體資料或各種其他 NoSQL技術知識的“資料工程師”湧現了出來。通常他們對原始 SQL 的瞭解甚至比初級工程師更少,因為 SQL 位於他們強大的資料工具的底層。
但是,如果你真正掌握了 SQL,再加上如今掌握這項技術的少之又少,所以你可以擁有巨大的權力。可能比以往任何時候都強大。
評論2:
眾所周知,SQL 是關係資料庫語言,其基礎是關係代數與集合論,因為有了這樣強大的後盾與堅固的基礎,所以 SQL 可以經受住時間的考驗而長久不衰。也正是因為這個原因,歷經多年乃至在不同的職責下你也不需要重新學習。
但是,這並不是說 SQL 就是完美的,事實上 SQL 距離“完美”還差得非常遠。因為 SQL 還有很多未能很好地支援,甚至背離關係模型之處。
舉個最簡單的例子,關係模型基於二值邏輯(即真/假),而 SQL 是三值邏輯:真、假、NULL。平白多出一個 NULL,其引發的問題也非常多,例如:
(A = B) OR (A<>B)
很顯然這是一個恆真表示式,要麼相等,要麼不相等,還有第三種選擇嗎?有!在 SQL 中,如果 A 為 NULL 或 B 為 NULL,則這個表示式的結果為 NULL。
除此之外,還有 SQL 中有重複資料,但是集合論中沒有,重複的資料在集合中會被視作一個。
最後再說一個,集合中的資料項沒有順序,而 SQL 表中的列有從左到右的順序。
所以,我們希望 SQL 能夠緊緊圍繞關係代數與集合論,取得更好的成長與發展。

img03.png
裡面有阿里Java高階大牛直播講解知識點,分享知識,課程內容都是各位老師多年工作經驗的梳理和總結,帶著大家全面、科學地建立自己的技術體系和技術認知!