結(jié)構(gòu)化查詢語(yǔ)言(Structured Query Language)簡(jiǎn)稱SQL,是一種特殊目的的編程語(yǔ)言,是一種數(shù)據(jù)庫(kù)查詢和程序設(shè)計(jì)語(yǔ)言,用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)。
結(jié)構(gòu)化查詢語(yǔ)言是高級(jí)的非過(guò)程化編程語(yǔ)言,允許用戶在高層數(shù)據(jù)結(jié)構(gòu)上工作。它不要求用戶指定對(duì)數(shù)據(jù)的存放方法,也不需要用戶了解具體的數(shù)據(jù)存放方式,所以具有完全不同底層結(jié)構(gòu)的不同數(shù)據(jù)庫(kù)系統(tǒng),可以使用相同的結(jié)構(gòu)化查詢語(yǔ)言作為數(shù)據(jù)輸入與管理的接口。結(jié)構(gòu)化查詢語(yǔ)言語(yǔ)句可以嵌套,這使它具有極大的靈活性和強(qiáng)大的功能。
SQL語(yǔ)言1974年由Boyce和Chamberlin提出,并首先在IBM公司研制的關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)SystemR上實(shí)現(xiàn)。由于它具有功能豐富、使用方便靈活、語(yǔ)言簡(jiǎn)潔易學(xué)等突出的優(yōu)點(diǎn),深受計(jì)算機(jī)工業(yè)界和計(jì)算機(jī)用戶的歡迎。1980年10月,經(jīng)美國(guó)國(guó)家標(biāo)準(zhǔn)局(ANSI)的數(shù)據(jù)庫(kù)委員會(huì)X3H2批準(zhǔn),將SQL作為關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言的美國(guó)標(biāo)準(zhǔn),同年公布了標(biāo)準(zhǔn)SQL,此后不久,國(guó)際標(biāo)準(zhǔn)化組織(ISO)也作出了同樣的決定。
SQL從功能上可以分為3部分:數(shù)據(jù)定義、數(shù)據(jù)操縱和數(shù)據(jù)控制。
SQL的核心部分相當(dāng)于關(guān)系代數(shù),但又具有關(guān)系代數(shù)所沒(méi)有的許多特點(diǎn),如聚集、數(shù)據(jù)庫(kù)更新等。它是一個(gè)綜合的、通用的、功能極強(qiáng)的關(guān)系數(shù)據(jù)庫(kù)語(yǔ)言。其特點(diǎn)是:
1、數(shù)據(jù)描述、操縱、控制等功能一體化。
2、兩種使用方式,統(tǒng)一的語(yǔ)法結(jié)構(gòu)。SQL有兩種使用方式。一是聯(lián)機(jī)交互使用,這種方式下的SQL實(shí)際上是作為自含型語(yǔ)言使用的。另一種方式是嵌入到某種高級(jí)程序設(shè)計(jì)語(yǔ)言(如C語(yǔ)言等)中去使用。前一種方式適合于非計(jì)算機(jī)專業(yè)人員使用,后一種方式適合于專業(yè)計(jì)算機(jī)人員使用。盡管使用方式不向,但所用語(yǔ)言的語(yǔ)法結(jié)構(gòu)基本上是一致的。
3、高度非過(guò)程化。SQL是一種第四代語(yǔ)言(4GL),用戶只需要提出“干什么”,無(wú)須具體指明“怎么干”,像存取路徑選擇和具體處理操作等均由系統(tǒng)自動(dòng)完成。
4、語(yǔ)言簡(jiǎn)潔,易學(xué)易用。盡管SQL的功能很強(qiáng),但語(yǔ)言十分簡(jiǎn)潔,核心功能只用了9個(gè)動(dòng)詞。SQL的語(yǔ)法接近英語(yǔ)口語(yǔ),所以,用戶很容易學(xué)習(xí)和使用。
在1970年代初,由IBM公司San Jose,California研究實(shí)驗(yàn)室的埃德加·科德發(fā)表將數(shù)據(jù)組成表格的應(yīng)用原則(Codd's Relational Algebra)。1974年,同一實(shí)驗(yàn)室的D.D.Chamberlin和R.F. Boyce對(duì)Codd's Relational Algebra在研制關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)System R中,研制出一套規(guī)范語(yǔ)言-SEQUEL(Structured English QUEry Language),并在1976年11月的IBM Journal of R&D上公布新版本的SQL(叫SEQUEL/2)。1980年改名為SQL。
1979年ORACLE公司首先提供商用的SQL,IBM公司在DB2和SQL/DS數(shù)據(jù)庫(kù)系統(tǒng)中也實(shí)現(xiàn)了SQL。
1986年10月,美國(guó)ANSI采用SQL作為關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)的標(biāo)準(zhǔn)語(yǔ)言(ANSI X3. 135-1986),后為國(guó)際標(biāo)準(zhǔn)化組織(ISO)采納為國(guó)際標(biāo)準(zhǔn)。
1989年,美國(guó)ANSI采納在ANSI X3.135-1989報(bào)告中定義的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)的SQL標(biāo)準(zhǔn)語(yǔ)言,稱為ANSI SQL 89,該標(biāo)準(zhǔn)替代ANSI X3.135-1986版本。
結(jié)構(gòu)化查詢語(yǔ)言包含6個(gè)部分:
1、數(shù)據(jù)查詢語(yǔ)言(DQL:Data Query Language):其語(yǔ)句,也稱為“數(shù)據(jù)檢索語(yǔ)句”,用以從表中獲得數(shù)據(jù),確定數(shù)據(jù)怎樣在應(yīng)用程序給出。保留字SELECT是DQL(也是所有SQL)用得最多的動(dòng)詞,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。這些DQL保留字常與其它類型的SQL語(yǔ)句一起使用。
2、數(shù)據(jù)操作語(yǔ)言(DML:Data Manipulation Language):其語(yǔ)句包括動(dòng)詞INSERT、UPDATE和DELETE。它們分別用于添加、修改和刪除。
3、事務(wù)控制語(yǔ)言(TCL):它的語(yǔ)句能確保被DML語(yǔ)句影響的表的所有行及時(shí)得以更新。包括COMMIT(提交)命令、SAVEPOINT(保存點(diǎn))命令、ROLLBACK(回滾)命令。
4、數(shù)據(jù)控制語(yǔ)言(DCL):它的語(yǔ)句通過(guò)GRANT或REVOKE實(shí)現(xiàn)權(quán)限控制,確定單個(gè)用戶和用戶組對(duì)數(shù)據(jù)庫(kù)對(duì)象的訪問(wèn)。某些RDBMS可用GRANT或REVOKE控制對(duì)表單個(gè)列的訪問(wèn)。
5、數(shù)據(jù)定義語(yǔ)言(DDL):其語(yǔ)句包括動(dòng)詞CREATE,ALTER和DROP。在數(shù)據(jù)庫(kù)中創(chuàng)建新表或修改、刪除表(CREATE TABLE或DROP TABLE);為表加入索引等。
6、指針控制語(yǔ)言(CCL):它的語(yǔ)句,像DECLARE CURSOR,F(xiàn)ETCH INTO和UPDATE WHERE CURRENT用于對(duì)一個(gè)或多個(gè)表單獨(dú)行的操作。
SQL風(fēng)格統(tǒng)一
SQL可以獨(dú)立完成數(shù)據(jù)庫(kù)生命周期中的全部活動(dòng),包括定義關(guān)系模式、錄入數(shù)據(jù)、建立數(shù)據(jù)庫(kù)、查詢、更新、維護(hù)、數(shù)據(jù)庫(kù)重構(gòu)、數(shù)據(jù)庫(kù)安全性控制等一系列操作,這就為數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)開發(fā)提供了良好的環(huán)境,在數(shù)據(jù)庫(kù)投入運(yùn)行后,還可根據(jù)需要隨時(shí)逐步修改模式,且不影響數(shù)據(jù)庫(kù)的運(yùn)行,從而使系統(tǒng)具有良好的可擴(kuò)充性。
高度非過(guò)程化
非關(guān)系數(shù)據(jù)模型的數(shù)據(jù)操縱語(yǔ)言是面向過(guò)程的語(yǔ)言,用其完成用戶請(qǐng)求時(shí),必須指定存取路徑。而用SQL進(jìn)行數(shù)據(jù)操作,用戶只需提出“做什么”,而不必指明“怎么做”,因此用戶無(wú)須了解存取路徑,存取路徑的選擇以及SQL語(yǔ)句的操作過(guò)程由系統(tǒng)自動(dòng)完成。這不但大大減輕了用戶負(fù)擔(dān),而且有利于提高數(shù)據(jù)獨(dú)立性。
面向集合的操作方式
SQL采用集合操作方式,不僅查找結(jié)果可以是元組的集合,而且一次插入、刪除、更新操作的對(duì)象也可以是元組的集合。
以同一種語(yǔ)法結(jié)構(gòu)提供兩種使用方式
SQL既是自含式語(yǔ)言,又是嵌入式語(yǔ)言。作為自含式語(yǔ)言,它能夠獨(dú)立地用于聯(lián)機(jī)交互的使用方式,用戶可以在終端鍵盤上直接輸入SQL命令對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作。作為嵌入式語(yǔ)言,SQL語(yǔ)句能夠嵌入到高級(jí)語(yǔ)言(如C、C#、JAVA)程序中,供程序員設(shè)計(jì)程序時(shí)使用。而在兩種不同的使用方式下,SQL的語(yǔ)法結(jié)構(gòu)基本上是一致的。這種以統(tǒng)一的語(yǔ)法結(jié)構(gòu)提供兩種不同的操作方式,為用戶提供了極大的靈活性與方便性。
語(yǔ)言簡(jiǎn)潔,易學(xué)易用
SQL功能極強(qiáng),但由于設(shè)計(jì)巧妙,語(yǔ)言十分簡(jiǎn)潔,完成數(shù)據(jù)定義、數(shù)據(jù)操縱、數(shù)據(jù)控制的核心功能只用了9個(gè)動(dòng)詞:CREATE、ALTER、DROP、SELECT、INSERT、UPDATE、DELETE、GRANT、REVOKE。且SQL語(yǔ)言語(yǔ)法簡(jiǎn)單,接近英語(yǔ)口語(yǔ),因此容易學(xué)習(xí),也容易使用。
在關(guān)系數(shù)據(jù)庫(kù)實(shí)現(xiàn)過(guò)程中,第一步是建立關(guān)系模式,定義基本表的結(jié)構(gòu),即該關(guān)系模式是哪些屬性組成的,每一屬性的數(shù)據(jù)類型及數(shù)據(jù)可能的長(zhǎng)度、是否允許為空值以及其它完整性約束條件。
定義基本表:
CREATE TABLE([列級(jí)完整性約束條件]
[,[列級(jí)完整性約束條件]]…
[,[列級(jí)完整性約束條件]]
[,表列級(jí)完整性約束條件]);
說(shuō)明:
①中是SQL語(yǔ)句必須定義的部分,[]中是SQL語(yǔ)句可選擇的部分,可以省略的。
②CREATE TABLE表示是SQL的關(guān)鍵字,指示本SQL語(yǔ)句的功能。
③是所要定義的基本表的名稱,一個(gè)表可以由一個(gè)或若干個(gè)屬性(列)組成,但至少有一個(gè)屬性,不允許一個(gè)屬性都沒(méi)有的表,這樣不是空表的含義。多個(gè)屬性定義由圓括號(hào)指示其邊界,通過(guò)逗號(hào)把各個(gè)屬性定義分隔開,各個(gè)屬性名稱互不相同,可以采用任意順序排列,一般按照實(shí)體或聯(lián)系定義屬性的順序排列,關(guān)鍵字屬性組在最前面,這樣容易區(qū)分,也防止遺漏定義的屬性。
④每個(gè)屬性由列名、數(shù)據(jù)類型、該列的多個(gè)完整性約束條件組成。其中列名一般為屬性的英文名縮寫,在Microsoft Access 2010中也可以采用中文,建議不要這樣做,編程開發(fā)時(shí)不方便。
⑤完整性約束條件,分為列級(jí)的完整性約束和表級(jí)的完整性約束,如果完整性約束條件涉及該表的多個(gè)屬性列,則必須定義在表級(jí)上,否則既可以定義在列級(jí)也可以定義在表級(jí)。這些完整性約束條件被存入系統(tǒng)的數(shù)據(jù)字典中,當(dāng)用戶操作表中數(shù)據(jù)時(shí)由RDBMS自動(dòng)檢查該操作是否違背這些完整性約束,如果違背則RDBMS拒絕本次操作,這樣保持了數(shù)據(jù)庫(kù)狀態(tài)的正確性和完整性,不需要用戶提供檢查,提高了編程的效率,降低了編程難度。列級(jí)的完整性通常為主關(guān)鍵字的定義、是否允許為空。表級(jí)的完整性約束條件一般為外碼定義。
數(shù)據(jù)操縱語(yǔ)言是完成數(shù)據(jù)操作的命令,一般分為兩種類型的數(shù)據(jù)操縱。
①數(shù)據(jù)檢索(常稱為查詢):尋找所需的具體數(shù)據(jù)。
②數(shù)據(jù)修改:插入、刪除和更新數(shù)據(jù)。
數(shù)據(jù)操縱語(yǔ)言一般由INSERT(插入)、DELETE(刪除)、UPDATE(更新)、SELECT(檢索,又稱查詢)等組成。由于 SELECT經(jīng)常使用,所以一般將它稱為查詢(檢索)語(yǔ)言并單獨(dú)出現(xiàn)。
數(shù)據(jù)管理(又稱數(shù)據(jù)控制)語(yǔ)言是用來(lái)管理(或控制)用戶訪問(wèn)權(quán)限的。由GRANT(授權(quán))、REVOKE(回收)命令組成。而Visual Foxpro6不支持這種權(quán)限管理。
SQL中的數(shù)據(jù)查詢語(yǔ)句
數(shù)據(jù)庫(kù)中的數(shù)據(jù)很多時(shí)候是為了查詢,因此,數(shù)據(jù)查詢是數(shù)據(jù)庫(kù)的核心操作。而在SQL中,查詢語(yǔ)言只有一條,即 SELECT語(yǔ)句。
SQL具有數(shù)據(jù)定義、數(shù)據(jù)操縱、和數(shù)據(jù)控制的功能。
1、SQL數(shù)據(jù)定義功能:能夠定義數(shù)據(jù)庫(kù)的三級(jí)模式結(jié)構(gòu),即外模式、全局模式和內(nèi)模式結(jié)構(gòu)。在SQL中,外模式又叫做視圖(View),全局模式簡(jiǎn)稱模式(Schema),內(nèi)模式由系統(tǒng)根據(jù)數(shù)據(jù)庫(kù)模式自動(dòng)實(shí)現(xiàn),一般無(wú)需用戶過(guò)問(wèn)。
2、SQL數(shù)據(jù)操縱功能:包括對(duì)基本表和視圖的數(shù)據(jù)插入、刪除和修改,特別是具有很強(qiáng)的數(shù)據(jù)查詢功能。
3、SQL的數(shù)據(jù)控制功能:主要是對(duì)用戶的訪問(wèn)權(quán)限加以控制,以保證系統(tǒng)的安全性。