1970 年 IBM 的 E.F. Codd 博士發表了論文《A Relational Model of Data for Large Shared Data Banks》 並建立了關係模型,經過一個簡單的二維表結構實現數據的存儲。spring
1979 年 Relational Software, Inc.(後來更名爲 Oracle) 發佈了第一個商用的關係數據庫產品。隨後出現了大量的關係數據庫管理系統,包括 MySQL、SQL Server、PostgreSQL 以及大數據分析平臺 Apache Hive、Spark SQL、Presto 等。至今,關係數據庫仍然是數據庫領域的主流。數據庫
如下是著名的數據庫系統排名網站 DB-Engines 上各類數據庫的排名狀況,關係數據庫佔據了絕對的優點。編程
SQL 是訪問和操做關係數據庫的標準語言。只要是關係數據庫,均可以使用 SQL 進行訪問和控制。SQL 一樣由 IBM 在後端
SQL 標準隨後經歷了屢次修訂,最新的版本爲 SQL:2019,增長了多維數組(MDA)的支持。下圖是 SQL 標準的發展歷程和主要的新增功能。數組
對於 SQL 標準,最熟悉的就是 SQL92 或者 SQL99。但實際上通過屢次修改,SQL 早已不是 40 年前的 SQL;現在它已經至關完備,功能強大,而且可以同時支持關係模型和非關係(XML、JSON)模型。具體來講,最新的 SQL 標準包含 10 個部分:框架
爲了便於學習,一般將主要的 SQL 語句分爲如下幾個類別:編程語言
SQL 是一種標準,不一樣廠商基於 SQL 標準實現了本身的數據庫產品,例如 Oracle、MySQL 等。這些數據庫都在必定程度上兼容 SQL 標準,具備必定的可移植性。但另外一方面,它們都存在許多專有的擴展,沒有任何一種產品徹底遵循標準。性能
隨着互聯網的發展和大數據的興起,出現了各類各樣的非關係(NoSQL)數據庫。NoSQL 表明 Not only SQL,代表它是針對傳統關係數據庫的補充和升級,而不是爲了替代關係數據庫。學習
NoSQL 數據庫主要用於解決關係數據庫在某些特定場景下的侷限性,好比海量存儲和水平擴展;但同時也會爲此犧牲某些關係數據庫的特性,例如對事務強一致性的支持和標準 SQL 接口。所以,這類數據庫主要用於對一致性要求不是很是嚴格的互聯網業務。常見的 NoSQL 數據庫能夠分爲如下幾類:大數據
另外一方面,關係數據庫也在積極擁抱變化,添加了許多非關係模型(XML 和 JSON)支持。以最流行的開源關係數據庫 MySQL 爲例,最新的 MySQL 8.0 版本增長了 JSON 文檔存儲的支持,而且推出了一個新的概念:NoSQL + SQL = MySQL。如下是 MySQL 官方的宣傳圖。
Oracle、SQL Server 以及 PostgreSQL 一樣也進行了相似的擴展,能夠支持原生的 XML 和 JSON 數據,而且提供了許多標準的 SQL 接口。
爲了同時得到關係數據庫對於事務的支持和標準的 SQL 接口,以及非關係數據庫的高度擴展性和高性能。現在市場上已經出現了一類新型關係型數據庫系統:NewSQL 數據庫。
比較有表明性的 NewSQL 數據庫包括 Google Spanner、VoltDB、PostgreSQL-XL 以及國產的 TiDB。這類新型數據庫是數據庫領域最新的發展方向,有志於在數據庫行業發展的同窗能夠加以關注。
讓咱們回到專欄的主題,爲何要學習 SQL 呢?簡單來講,由於有用。下圖是 Stack Overflow 在 2019 年關於最流行編程技術的調查結果。
做爲數據處理領域的專用語言,SQL 排在了第三位,超過 50% 的開發者都須要使用到 SQL。那麼,具體什麼職位須要使用 SQL,用 SQL 來作什麼?
SQL 不但應用普遍,並且簡單易學。由於它在設計之初就考慮了非技術人員的使用需求,SQL 語句全都是由簡單的英語單詞組成,使用者只須要聲明本身想要的結果,而將具體的實現過程交給數據庫管理系統。
學習編程,你可能會猶豫選擇 C++ 仍是 Java;入門數據科學,你可能會糾結於選擇 Python 仍是 R;但不管如何,SQL 都是 IT 從業人員不可或缺的一項技能!
本專欄主要討論 SQL 編程技術和思想,分爲四個部分:基礎篇、進階篇、開發篇以及擴展篇。