SQL語言概況(4.1) [toc] 參考資料: 資料庫原理及設計(第3版) 配套資料庫為:microsoft sql server 參照ANSI SQL 92標準 4.1 SQL語言概況 4.1.1 歷史及標準簡介 一切都源於 關係型資料庫之父 —— Edgar Frank Codd 於1970年 ...
SQL語言概況(4.1)
目錄
參考資料:
資料庫原理及設計(第3版)
配套資料庫為:microsoft sql server
參照ANSI SQL-92標準
4.1 SQL語言概況
4.1.1 歷史及標準簡介
一切都源於關係型資料庫之父——Edgar Frank Codd 於1970年6月首次提出了關係數據模型。
之後嘛,肯定是經歷了以下這個過程:
-
各學校、公司開始理論研究,看看這個玩意兒能不能給帶來利益?!
-
誒?!好像可以帶來利益誒……那我們開發成產品商化吧,再配套一個使用工具(語言)!
-
權威機構:麻了?!怎麼發展的這麼
蓬勃(五花八門)?!不得行,是時候我出場統一一下標準了! -
基於標準開發,再來點擴展,投放市場使用……
其它公司:誒?!好玩意兒……可是我們的開發應用要界面啊,能不能把這個嵌入到其他語言中使用?!
-
……
至此,我們來梳理一下真正的歷史過程:
-
1974年Boyce 和Chamberlin提出SQL
-
20世紀70年代中期,IBM公司在研製System R 的過程中,開發了世界上最早的SQL語言
-
1979年,Oracle公司最先提出了商用的SQL語言
-
SQL標準變遷史
- 1986年10月,ANSI制訂,SQL-86
- 1989年,ANSI改進,SQL-89
- 1992年,ANSI與ISO合作改動完善,SQL-92
- 1999年,增加面向對象特征擴展,提出SQL:1999
- 2003年,SQL:2003
- ……
可以說,命名就很有意思了,就是年份結尾嘛,但是1999年開始變成四位數字,具體原因我也是百度了一篇博客,放出來《SQL標準簡介》
還有一點,非正式的一些稱呼:
- 第一代SQL語言,SQL1,SQL-86 & SQL-89
- 第二代SQL語言,SQL2,SQL-92
- 第三代SQL語言,SQL3,SQL:1999
其中,針對於SQL-92來說,絕大多數RDBMS產品不是完全支持的,那差異一般都會體現在SQL命令的語法上面。
針對這個不完全支持,我們可以從兩個方向上來看:
- SQL-92中的某些功能,在實際RDBMS中可能沒有得到支持
- 實際RDBMS也有可能出現該標準中沒有的功能和特性
那麼根據支持SQL-92的程度,我們可以分為三種:
- 入門(entry)級:其功能特性接近SQL-89
- 中間(intermediate)級:包含SQL-92近一半的新特點
- 完全(full)版:完全支持
因此,所給的建議是:
- 使用具體的RDBMS時,查閱產品的技術資料
- 增強SQL代碼的移植性,最好採用在SQL標準中也推薦的功能
4.1.2 SQL語言定義及特點
什麼是SQL語言?
- 是最流行的一種資料庫語言
- 結構化查詢語言(structured query language)
- 是RDBMS支持的資料庫語言
很多人會跟我有一樣的疑問,為啥叫查詢語言???
-
首先不要被這個名字誤導了,並不是它只支持查詢,它的功能還有很多,,比如數據模式定義、數據的“增、刪、改”以及安全和事務控制功能。
所以說……一個好的名字還是很重要的……
-
具體原因:從操縱數據的角度來看,查詢是最重要也是用的最多的操作(想想你們自己管理開發的時候,是不是動不動就要查詢這個查詢那個?!)
接下來,我們看看這個SQL語言有哪些功能特點呢?
-
功能一體化。
說的有點玄乎,實際上就是,它作為資料庫語言的一種,也是遵循資料庫語言的劃分,由3個子語言構成:
- DDL(data definition language)
- DML(data manipulation language)
- DCL(data control language)
各個自語言又有很多自己的功能……
-
語言非過程化。
之前我們說過,它的名字中有結構化,那什麼是結構化,什麼是過程化呢?
- 結構化是相對於過程化來說的
- 過程化的語言:需要用戶在程式設計中指明程式“做什麼”,還需要程式員按照一定的演算法編寫出“怎麼做”的程式來。
- 結構化的預言(以RDBMS為例):用戶只需要定義“做什麼”,RDBMS系統內部會解決“怎麼做”。
-
互動式與嵌入式使用。
- 互動式(interactive):用戶直接在RDBMS控制臺上使用SQL語言中的SQL命令直接交互。
- 嵌入式(embedded):在過程化語言(宿主host語言)中使用。
-
標準化與易移植性。
之前,我們也說過,各個具體的RDBMS產品中支持的SQL語言情況是有所差異的,但是大多都能支持標準的大部分,因此,移植起來會相對容易。
4.1.3 使用說明
利用SQL語言,可以完成關係模型的具體化,那我們之前知道,任何模型都包括3方面的內容:
- 數據結構
- 完整性約束
- 數據操縱
那麼如何將這三部分具體化呢?
這由SQL語言中的兩個子語言承擔:
- DDL完成數據結構和完整性約束
- DML完成數據操縱
之後,我將會分塊對這兩個子語言進行學習……