本頁使用了標題或全文手工轉換

SQL

維基百科,自由的百科全書
前往: 導覽搜尋

結構化查詢語言英語:Structural Query Language縮寫SQL),是一種特殊目的之程式語言,用於資料庫中的標準資料查詢語言IBM公司最早使用在其開發的資料庫系統中。1986年10月,美國國家標準學會對SQL進行規範後,以此作為關係式資料庫管理系統的標準語言(ANSI X3. 135-1986),1987年得到國際標準組織的支援下成為國際標準。不過各種通行的資料庫系統在其實踐過程中都對SQL規範作了某些編改和擴充。所以,實際上不同資料庫系統之間的SQL不能完全相互通用。

歷史[編輯]

在1970年代初,由IBM公司San Jose,California研究實驗室的埃德加·科德發表將資料組成表格的應用原則(Codd's Relational Algebra)。1974年,同一實驗室的D.D.Chamberlin和R.F. Boyce對Codd's Relational Algebra在研製關聯式資料庫管理系統System R中,研製出一套規範語言-SEQUEL(Structured English QUEry Language),並在1976年11月的IBM Journal of R&D上公布新版本的SQL(叫SEQUEL/2)。1980年改名為SQL。

1979年ORACLE公司首先提供商用的SQL,IBM公司在DB2和SQL/DS資料庫系統中也實作了SQL。

1986年10月,美國ANSI採用SQL作為關聯式資料庫管理系統的標準語言(ANSI X3. 135-1986),後為國際標準化組織(ISO)採納為國際標準。

1989年,美國ANSI採納在ANSI X3.135-1989報告中定義的關聯式資料庫管理系統的SQL標準語言,稱為ANSI SQL 89,該標準替代ANSI X3.135-1986版本。該標準為下列組織所採納:

  • 國際標準化組織(ISO),為ISO 9075-1989報告「Database Language SQL With Integrity Enhancement」
  • 美國聯邦政府,發布在The Federal Information Processing Standard Publication(FIPS PUB)127

目前,所有主要的關聯式資料庫管理系統支援某些形式的SQL,大部分資料庫至少遵守ANSI SQL89標準。

ANSI SQL92標準在交叉連線(cross join)和內部連線之上,新增加了外部連線,並支援在FROM子句中寫連線運算式。支援集合的並運算、交運算。支援Case (SQL)運算式。支援CHECK約束。建立臨時表。支援cursor。支援事務隔離

語言特點[編輯]

SQL是高階的非過程化編程語言,它允許用戶在高層資料結構上工作。它不要求用戶指定對資料的存放方法,也不需要用戶了解其具體的資料存放方式。而它的介面,能使具有底層結構完全不同的資料庫系統和不同資料庫之間,使用相同的SQL作為資料的輸入與管理。它以記錄專案〔records〕的合集(set)〔項集,record set〕作為操縱物件,所有SQL語句接受項集作為輸入,回送出的項集作為輸出,這種項集特性允許一條SQL語句的輸出作為另一條SQL語句的輸入,所以SQL語句可以巢狀,這使它擁有極大的靈活性和強大的功能。在多數情況下,在其他編程語言中需要用一大段程式才可實踐的一個單獨事件,而其在SQL上只需要一個語句就可以被表達出來。這也意味著用SQL可以寫出非常複雜的語句。

SQL同時也是資料庫檔案格式副檔名

SQL包含四個部分:

標準化[編輯]

  • SQL-86
  • SQL-89
  • SQL-92
  • SQL:1999
  • SQL:2003
  • SQL:2006
  • SQL:2008
  • SQL:2011

SQL函式[編輯]

函式 描述 範例
AVG 平均值
COUNT 計數(不含Null)
First 第一個記錄的值
MAX 最大值
MIN 範例 範例
STDEV 範例 範例
STDEVP 範例 範例
SUM 範例 範例
VAR 範例 範例
VARP 範例 範例
UCASE 範例 範例
LCASE 範例 範例
MID 範例 範例
LEN 範例 範例
INSTR 範例 範例
LEFT 範例 範例
RIGHT 範例 範例
ROUND 範例 範例
MOD 範例 範例
NOW 範例 範例
FORMAT 範例 範例
DATEDIFF 範例 範例
範例 範例 範例
範例 範例 範例
範例 範例 範例
範例 範例 範例
範例 範例 範例
範例 範例 範例
範例 範例 範例

以SQL為基礎的其他延伸語言[編輯]

微軟MS SQL-Server,以及Sybase Adaptive Server系列資料庫所用的SQL
Oracle 資料庫所使用的SQL

安全問題[編輯]

由於SQL指令在部份進階使用時,語法會依照特定條件來變換,而且若是表格中的欄位過多時,許多開發人員都會習慣以字串組立的方式建立SQL指令,而且又使用系統管理員級的帳戶連到資料庫,因此讓駭客有機會利用SQL的組立方式進行攻擊,像是在指令中添加部份刺探性或破壞性的指令(例如DROP TABLEDROP DATABASE或是DELETE * FROM myTable等具破壞性的指令),讓資料庫的資料或實體伺服器被破壞,導致服務中斷或是系統癱瘓等後果,或是以邏輯的漏洞,在密碼欄寫入特殊字串(例如' or '1'='1),讓該字串形成的邏輯判斷永遠為真,而不需要知道密碼,以達成非法登入系統的目的,此種攻擊手法稱為SQL注入(SQL injection)。

目前實務上較有效的防禦方法,就是全面改用參數化查詢

參考資料[編輯]

相關[編輯]

Wikibooks-logo.svg
您可以在維基教科書中尋找此百科條目的相關電子教程:

外部連結[編輯]

資料庫管理系統(DBMS) 檢視 · 討論 · 編輯

概念
資料庫 · 資料模型 · 資料庫儲存結構英語Database storage structures · 關係 (資料庫) · 關係模型 · 分散式資料庫 · ACID ( 原子性英語Atomicity (database systems) · 一致性· 隔離性· 永續性英語Durability (database systems) ) · Null值
關係模型 · 資料庫正規化 · 資料庫完整性 · 實體完整性 · 參照完整性英語Referential integrity · 關聯式資料庫管理系統 
主鍵 · 外來鍵 · 代理鍵 · 超鍵 · 候選鍵 

資料庫元件
觸發器 · 視圖 · 資料庫表 · 指標 (資料庫) · 事務記錄檔英語Transaction log · 資料庫事務 · 並行控制 · 樂觀鎖 · 悲觀鎖 · 資料庫索引 
儲存程式 · 資料庫分割英語Partition (database)

SQL
分類: 資料查詢語言(DQL) - 資料定義語言(DDL) - 資料操縱語言(DML) - 資料控制語言(DCL)
指令:SELECT · INSERT · UPDATE · MERGE · DELETE · JOIN · UNION英語Union (SQL) · CREATE · DROP · Begin work · COMMIT · ROLLBACK · TRUNCATE · ALTER
安全: SQL資料隱碼攻擊 · 參數化查詢

資料庫管理系統的實作

實作類型
關聯式資料庫 · 檔案型資料庫 · Deductive · 維度化資料庫 · 階層式 · 圖形資料庫 · NoSQL· 物件資料庫 · 物件關聯式資料庫 · Temporal · XML資料庫

資料庫產品
物件型對比) · 關係型對比

資料庫元件
資料查詢語言 · 查詢最佳化器 · 查詢計畫 · 嵌入式SQL · ODBC · JDBC · OLE DB