結構化查詢(xun)語(yu)言(Structured Query Language)簡稱(cheng)SQL,是一(yi)種特(te)殊目(mu)的的編程語(yu)言,是一(yi)種數據庫(ku)查詢(xun)和程序設計(ji)語(yu)言,用于存(cun)取數據以(yi)及(ji)查詢(xun)、更新和管(guan)理關系(xi)數據庫(ku)系(xi)統(tong)。
結(jie)構(gou)化(hua)查(cha)詢語(yu)(yu)言是高(gao)級(ji)的非過程化(hua)編程語(yu)(yu)言,允(yun)許用(yong)戶(hu)在高(gao)層數據(ju)結(jie)構(gou)上工作。它不(bu)要求用(yong)戶(hu)指定對數據(ju)的存放方法,也不(bu)需要用(yong)戶(hu)了(le)解具(ju)體的數據(ju)存放方式,所以具(ju)有(you)完全(quan)不(bu)同底層結(jie)構(gou)的不(bu)同數據(ju)庫系(xi)統,可(ke)(ke)以使(shi)用(yong)相同的結(jie)構(gou)化(hua)查(cha)詢語(yu)(yu)言作為數據(ju)輸入與管理(li)的接口。結(jie)構(gou)化(hua)查(cha)詢語(yu)(yu)言語(yu)(yu)句可(ke)(ke)以嵌(qian)套,這使(shi)它具(ju)有(you)極大(da)(da)的靈(ling)活性和強(qiang)大(da)(da)的功能(neng)。
SQL語(yu)言1974年(nian)(nian)由(you)Boyce和Chamberlin提出,并(bing)首先在IBM公(gong)司(si)研制的關系(xi)數據庫系(xi)統(tong)SystemR上實現。由(you)于它具有功能豐富、使用(yong)方便靈(ling)活、語(yu)言簡潔易學等突(tu)出的優點,深受計算機工業(ye)界和計算機用(yong)戶的歡迎(ying)。1980年(nian)(nian)10月,經(jing)美國(guo)國(guo)家標準(zhun)(zhun)局(ANSI)的數據庫委員會X3H2批準(zhun)(zhun),將SQL作(zuo)為關系(xi)數據庫語(yu)言的美國(guo)標準(zhun)(zhun),同年(nian)(nian)公(gong)布了標準(zhun)(zhun)SQL,此后不久,國(guo)際(ji)標準(zhun)(zhun)化組織(ISO)也作(zuo)出了同樣的決(jue)定。
SQL從功能上可以分為3部分:數據(ju)定義、數據(ju)操縱和數據(ju)控制。
SQL的(de)(de)核心部分相當于關系(xi)代(dai)數,但又具有(you)關系(xi)代(dai)數所沒有(you)的(de)(de)許多(duo)特(te)點,如聚集、數據庫更新等。它是一個(ge)綜合的(de)(de)、通用的(de)(de)、功(gong)能(neng)極強的(de)(de)關系(xi)數據庫語言。其(qi)特(te)點是:
1、數據描述(shu)、操縱、控制等功能一體化。
2、兩(liang)種使(shi)(shi)(shi)(shi)用(yong)(yong)(yong)(yong)方式(shi)(shi)(shi)(shi),統一的語(yu)(yu)法結(jie)構。SQL有兩(liang)種使(shi)(shi)(shi)(shi)用(yong)(yong)(yong)(yong)方式(shi)(shi)(shi)(shi)。一是聯機(ji)交(jiao)互(hu)使(shi)(shi)(shi)(shi)用(yong)(yong)(yong)(yong),這種方式(shi)(shi)(shi)(shi)下的SQL實際(ji)上是作(zuo)為自(zi)含型語(yu)(yu)言(yan)使(shi)(shi)(shi)(shi)用(yong)(yong)(yong)(yong)的。另一種方式(shi)(shi)(shi)(shi)是嵌(qian)入到某種高級程序(xu)設計(ji)語(yu)(yu)言(yan)(如C語(yu)(yu)言(yan)等)中去使(shi)(shi)(shi)(shi)用(yong)(yong)(yong)(yong)。前一種方式(shi)(shi)(shi)(shi)適合于非計(ji)算機(ji)專業人(ren)員(yuan)使(shi)(shi)(shi)(shi)用(yong)(yong)(yong)(yong),后一種方式(shi)(shi)(shi)(shi)適合于專業計(ji)算機(ji)人(ren)員(yuan)使(shi)(shi)(shi)(shi)用(yong)(yong)(yong)(yong)。盡管(guan)使(shi)(shi)(shi)(shi)用(yong)(yong)(yong)(yong)方式(shi)(shi)(shi)(shi)不向,但所(suo)用(yong)(yong)(yong)(yong)語(yu)(yu)言(yan)的語(yu)(yu)法結(jie)構基(ji)本上是一致的。
3、高度非過程化。SQL是一種第四代語(yu)言(4GL),用戶只需(xu)要提出(chu)“干什么”,無須具(ju)體(ti)指(zhi)明“怎么干”,像存取路徑(jing)選擇和具(ju)體(ti)處理(li)操作等均由系統自(zi)動完成。
4、語(yu)言簡(jian)潔,易學易用。盡管(guan)SQL的功能很強,但語(yu)言十(shi)分(fen)簡(jian)潔,核心功能只用了9個動詞。SQL的語(yu)法接近英語(yu)口(kou)語(yu),所以(yi),用戶很容易學習和使用。
在(zai)1970年代初,由IBM公(gong)司(si)San Jose,California研(yan)(yan)究實驗(yan)室的(de)(de)(de)埃德加·科德發(fa)表(biao)將數據組成表(biao)格的(de)(de)(de)應用原則(Codd's Relational Algebra)。1974年,同一(yi)(yi)實驗(yan)室的(de)(de)(de)D.D.Chamberlin和R.F. Boyce對Codd's Relational Algebra在(zai)研(yan)(yan)制(zhi)關(guan)系數據庫管理系統System R中,研(yan)(yan)制(zhi)出一(yi)(yi)套(tao)規范語(yu)言-SEQUEL(Structured English QUEry Language),并在(zai)1976年11月的(de)(de)(de)IBM Journal of R&D上公(gong)布新(xin)版本的(de)(de)(de)SQL(叫SEQUEL/2)。1980年改名為(wei)SQL。
1979年ORACLE公(gong)司(si)首先提供商用的SQL,IBM公(gong)司(si)在DB2和SQL/DS數據庫系統中也實現了SQL。
1986年10月,美(mei)國(guo)ANSI采用(yong)SQL作為(wei)(wei)關系數據庫(ku)管理(li)系統的(de)標準(zhun)語言(ANSI X3. 135-1986),后為(wei)(wei)國(guo)際標準(zhun)化(hua)組織(ISO)采納為(wei)(wei)國(guo)際標準(zhun)。
1989年,美國(guo)ANSI采(cai)納在ANSI X3.135-1989報告中定(ding)義的關系數(shu)據庫管(guan)理系統的SQL標準語言,稱為ANSI SQL 89,該標準替代(dai)ANSI X3.135-1986版(ban)本。
結構化查詢語言包(bao)含6個部分:
1、數(shu)據(ju)查(cha)詢(xun)語(yu)(yu)言(DQL:Data Query Language):其語(yu)(yu)句,也(ye)(ye)稱為(wei)“數(shu)據(ju)檢索(suo)語(yu)(yu)句”,用(yong)(yong)(yong)以從表中獲得(de)數(shu)據(ju),確定數(shu)據(ju)怎樣在應用(yong)(yong)(yong)程序給出。保留(liu)字SELECT是DQL(也(ye)(ye)是所有SQL)用(yong)(yong)(yong)得(de)最多的(de)動詞,其他DQL常用(yong)(yong)(yong)的(de)保留(liu)字有WHERE,ORDER BY,GROUP BY和HAVING。這些DQL保留(liu)字常與其它(ta)類型的(de)SQL語(yu)(yu)句一起使(shi)用(yong)(yong)(yong)。
2、數據操作語言(DML:Data Manipulation Language):其(qi)語句(ju)包括動詞INSERT、UPDATE和DELETE。它們分別用于添加、修改和刪除(chu)。
3、事務控制語(yu)言(TCL):它(ta)的語(yu)句(ju)(ju)能確(que)保被(bei)DML語(yu)句(ju)(ju)影(ying)響的表的所有(you)行及時得以更新。包(bao)括COMMIT(提交(jiao))命(ming)令、SAVEPOINT(保存(cun)點)命(ming)令、ROLLBACK(回滾)命(ming)令。
4、數(shu)據控制(zhi)語言(DCL):它的(de)語句(ju)通過GRANT或(huo)REVOKE實(shi)現權限控制(zhi),確定單(dan)個(ge)用(yong)戶和用(yong)戶組(zu)對(dui)數(shu)據庫對(dui)象的(de)訪問(wen)。某些RDBMS可用(yong)GRANT或(huo)REVOKE控制(zhi)對(dui)表(biao)單(dan)個(ge)列的(de)訪問(wen)。
5、數據定義(yi)語言(DDL):其(qi)語句包括動(dong)詞CREATE,ALTER和DROP。在數據庫中(zhong)創建新表(biao)或修(xiu)改、刪(shan)除表(biao)(CREATE TABLE或DROP TABLE);為表(biao)加入索引等(deng)。
6、指針控制語言(CCL):它的語句,像DECLARE CURSOR,FETCH INTO和(he)UPDATE WHERE CURRENT用于對(dui)一個或多個表單獨行(xing)的操作。
SQL風格統一
SQL可(ke)以獨立(li)完成數據(ju)(ju)庫生命周(zhou)期中的(de)全部活動(dong),包括定義關系(xi)模(mo)式、錄入數據(ju)(ju)、建(jian)立(li)數據(ju)(ju)庫、查詢(xun)、更新、維(wei)護、數據(ju)(ju)庫重構、數據(ju)(ju)庫安全性控制等一(yi)系(xi)列操作,這(zhe)就為數據(ju)(ju)庫應用系(xi)統(tong)開發(fa)提供了(le)良好的(de)環境,在數據(ju)(ju)庫投入運行后,還可(ke)根(gen)據(ju)(ju)需要(yao)隨時(shi)逐(zhu)步修改模(mo)式,且不(bu)影(ying)響數據(ju)(ju)庫的(de)運行,從(cong)而使系(xi)統(tong)具(ju)有良好的(de)可(ke)擴充(chong)性。
高度非過程化
非關系數(shu)據(ju)(ju)模型(xing)的(de)數(shu)據(ju)(ju)操縱語言是面向(xiang)過程的(de)語言,用(yong)(yong)其(qi)完成(cheng)用(yong)(yong)戶(hu)請求時,必(bi)須指定存取路(lu)(lu)(lu)徑(jing)。而(er)用(yong)(yong)SQL進行(xing)數(shu)據(ju)(ju)操作,用(yong)(yong)戶(hu)只(zhi)需提出“做什么(me)”,而(er)不(bu)必(bi)指明“怎么(me)做”,因此用(yong)(yong)戶(hu)無須了解存取路(lu)(lu)(lu)徑(jing),存取路(lu)(lu)(lu)徑(jing)的(de)選擇以及SQL語句的(de)操作過程由系統自(zi)動完成(cheng)。這(zhe)不(bu)但大大減輕了用(yong)(yong)戶(hu)負擔,而(er)且有利于提高數(shu)據(ju)(ju)獨(du)立性。
面向集合的操作方式
SQL采(cai)用集(ji)合(he)操作方(fang)式,不(bu)僅查(cha)找結果可以是(shi)元組的(de)集(ji)合(he),而且一次插入、刪(shan)除、更(geng)新操作的(de)對象也可以是(shi)元組的(de)集(ji)合(he)。
以同一種語法結構提供(gong)兩種使用方式
SQL既是自(zi)含(han)式(shi)(shi)語言(yan),又(you)是嵌入(ru)式(shi)(shi)語言(yan)。作(zuo)為自(zi)含(han)式(shi)(shi)語言(yan),它能(neng)夠獨立地用于聯機交互的(de)使(shi)用方(fang)式(shi)(shi),用戶可以在(zai)終端鍵盤上直接輸入(ru)SQL命令對數據庫(ku)進行操作(zuo)。作(zuo)為嵌入(ru)式(shi)(shi)語言(yan),SQL語句(ju)能(neng)夠嵌入(ru)到高級語言(yan)(如C、C#、JAVA)程(cheng)序(xu)(xu)中(zhong),供(gong)程(cheng)序(xu)(xu)員設計程(cheng)序(xu)(xu)時使(shi)用。而在(zai)兩(liang)(liang)種不同(tong)的(de)使(shi)用方(fang)式(shi)(shi)下,SQL的(de)語法結(jie)(jie)構基本上是一(yi)致的(de)。這種以統一(yi)的(de)語法結(jie)(jie)構提(ti)供(gong)兩(liang)(liang)種不同(tong)的(de)操作(zuo)方(fang)式(shi)(shi),為用戶提(ti)供(gong)了極大的(de)靈活性與方(fang)便性。
語言簡潔,易學易用
SQL功能極強,但由(you)于設計巧(qiao)妙,語(yu)言十分簡潔,完成數(shu)據定義、數(shu)據操縱、數(shu)據控制的(de)核(he)心功能只用了(le)9個動詞:CREATE、ALTER、DROP、SELECT、INSERT、UPDATE、DELETE、GRANT、REVOKE。且SQL語(yu)言語(yu)法簡單,接(jie)近英(ying)語(yu)口語(yu),因此(ci)容(rong)易學(xue)習,也(ye)容(rong)易使用。
在關(guan)系(xi)數據庫實現(xian)過(guo)程中,第一步(bu)是(shi)建立關(guan)系(xi)模(mo)式,定義基本表(biao)的結(jie)構,即(ji)該關(guan)系(xi)模(mo)式是(shi)哪些屬性組成(cheng)的,每一屬性的數據類型及(ji)數據可能的長度、是(shi)否允許為空值以及(ji)其它(ta)完整性約束條件。
定義基本表:
CREATE TABLE([列(lie)級(ji)完整性約束條件(jian)]
[,[列級完(wan)整性(xing)約束條(tiao)件]]…
[,[列級完整(zheng)性(xing)約束條件]]
[,表列級完整(zheng)性約束條件]);
說明:
①中(zhong)是(shi)SQL語(yu)句必須(xu)定義的(de)部分,[]中(zhong)是(shi)SQL語(yu)句可(ke)選擇的(de)部分,可(ke)以(yi)省(sheng)略的(de)。
②CREATE TABLE表示是SQL的關鍵字,指示本(ben)SQL語(yu)句(ju)的功(gong)能(neng)。
③是(shi)所(suo)要(yao)定(ding)(ding)義的(de)(de)(de)基本(ben)表(biao)的(de)(de)(de)名稱,一個(ge)表(biao)可以(yi)(yi)由(you)一個(ge)或若干個(ge)屬(shu)(shu)性(列(lie)(lie))組成,但至(zhi)少有(you)(you)一個(ge)屬(shu)(shu)性,不允許一個(ge)屬(shu)(shu)性都(dou)沒(mei)有(you)(you)的(de)(de)(de)表(biao),這樣(yang)(yang)不是(shi)空表(biao)的(de)(de)(de)含義。多(duo)個(ge)屬(shu)(shu)性定(ding)(ding)義由(you)圓括號指示其邊界,通過逗號把各個(ge)屬(shu)(shu)性定(ding)(ding)義分隔開,各個(ge)屬(shu)(shu)性名稱互不相(xiang)同,可以(yi)(yi)采用任意順(shun)序排列(lie)(lie),一般(ban)按照(zhao)實(shi)體或聯系定(ding)(ding)義屬(shu)(shu)性的(de)(de)(de)順(shun)序排列(lie)(lie),關(guan)鍵字屬(shu)(shu)性組在最(zui)前面,這樣(yang)(yang)容易區分,也防止遺漏定(ding)(ding)義的(de)(de)(de)屬(shu)(shu)性。
④每個屬性(xing)由列名(ming)、數據類型(xing)、該列的(de)多個完整(zheng)性(xing)約束條件(jian)組成。其中列名(ming)一(yi)般為屬性(xing)的(de)英文名(ming)縮寫,在Microsoft Access 2010中也可以(yi)采用中文,建議不要這樣做,編程開發時不方便。
⑤完(wan)(wan)(wan)整(zheng)性約(yue)束(shu)條(tiao)(tiao)件(jian)(jian),分(fen)為(wei)列(lie)級(ji)(ji)(ji)(ji)的(de)完(wan)(wan)(wan)整(zheng)性約(yue)束(shu)和表(biao)級(ji)(ji)(ji)(ji)的(de)完(wan)(wan)(wan)整(zheng)性約(yue)束(shu),如(ru)果(guo)完(wan)(wan)(wan)整(zheng)性約(yue)束(shu)條(tiao)(tiao)件(jian)(jian)涉及該表(biao)的(de)多個屬性列(lie),則(ze)(ze)必須定義在(zai)表(biao)級(ji)(ji)(ji)(ji)上,否則(ze)(ze)既可以(yi)(yi)定義在(zai)列(lie)級(ji)(ji)(ji)(ji)也可以(yi)(yi)定義在(zai)表(biao)級(ji)(ji)(ji)(ji)。這些(xie)完(wan)(wan)(wan)整(zheng)性約(yue)束(shu)條(tiao)(tiao)件(jian)(jian)被存入系統的(de)數(shu)據(ju)字典中,當用戶操(cao)作表(biao)中數(shu)據(ju)時(shi)由RDBMS自動檢(jian)查(cha)該操(cao)作是否違背(bei)這些(xie)完(wan)(wan)(wan)整(zheng)性約(yue)束(shu),如(ru)果(guo)違背(bei)則(ze)(ze)RDBMS拒絕本(ben)次操(cao)作,這樣(yang)保持(chi)了數(shu)據(ju)庫狀態的(de)正確性和完(wan)(wan)(wan)整(zheng)性,不需要用戶提(ti)供檢(jian)查(cha),提(ti)高(gao)了編程的(de)效(xiao)率(lv),降低了編程難(nan)度(du)。列(lie)級(ji)(ji)(ji)(ji)的(de)完(wan)(wan)(wan)整(zheng)性通常為(wei)主關鍵字的(de)定義、是否允許為(wei)空。表(biao)級(ji)(ji)(ji)(ji)的(de)完(wan)(wan)(wan)整(zheng)性約(yue)束(shu)條(tiao)(tiao)件(jian)(jian)一般為(wei)外碼定義。
數(shu)據(ju)(ju)操(cao)縱語言是完成數(shu)據(ju)(ju)操(cao)作的命(ming)令,一般(ban)分(fen)為(wei)兩種類型的數(shu)據(ju)(ju)操(cao)縱。
①數(shu)(shu)據(ju)檢索(常稱為查詢):尋找所(suo)需的具體數(shu)(shu)據(ju)。
②數據修(xiu)改:插入、刪除和更新(xin)數據。
數據操縱語(yu)(yu)言一般(ban)由INSERT(插入)、DELETE(刪除)、UPDATE(更新)、SELECT(檢索,又稱(cheng)查詢)等(deng)組成。由于 SELECT經常(chang)使用,所以一般(ban)將(jiang)它稱(cheng)為查詢(檢索)語(yu)(yu)言并單(dan)獨出現。
數(shu)據管理(li)(又稱數(shu)據控(kong)制)語言(yan)是用(yong)來管理(li)(或控(kong)制)用(yong)戶訪問權(quan)限(xian)的(de)。由(you)GRANT(授(shou)權(quan))、REVOKE(回收(shou))命令(ling)組成。而Visual Foxpro6不支持這種權(quan)限(xian)管理(li)。
SQL中(zhong)的數據查詢語句
數據(ju)(ju)庫(ku)中的(de)數據(ju)(ju)很多時候(hou)是為了查(cha)詢(xun),因此,數據(ju)(ju)查(cha)詢(xun)是數據(ju)(ju)庫(ku)的(de)核心操(cao)作(zuo)。而在SQL中,查(cha)詢(xun)語(yu)言只有一(yi)條,即(ji) SELECT語(yu)句。
SQL具有數據(ju)定義(yi)、數據(ju)操縱、和數據(ju)控制的功(gong)能。
1、SQL數(shu)據(ju)(ju)定義(yi)功能:能夠定義(yi)數(shu)據(ju)(ju)庫(ku)的(de)三級(ji)模(mo)(mo)(mo)式(shi)(shi)結(jie)構,即外(wai)模(mo)(mo)(mo)式(shi)(shi)、全(quan)局模(mo)(mo)(mo)式(shi)(shi)和內(nei)模(mo)(mo)(mo)式(shi)(shi)結(jie)構。在SQL中(zhong),外(wai)模(mo)(mo)(mo)式(shi)(shi)又叫做視圖(View),全(quan)局模(mo)(mo)(mo)式(shi)(shi)簡(jian)稱模(mo)(mo)(mo)式(shi)(shi)(Schema),內(nei)模(mo)(mo)(mo)式(shi)(shi)由系統根據(ju)(ju)數(shu)據(ju)(ju)庫(ku)模(mo)(mo)(mo)式(shi)(shi)自動(dong)實(shi)現,一(yi)般無(wu)需用戶過(guo)問(wen)。
2、SQL數據(ju)操縱功能:包括對基本表和視圖的數據(ju)插入(ru)、刪除和修(xiu)改(gai),特別是(shi)具有很強的數據(ju)查詢功能。
3、SQL的(de)數據控制功能(neng):主要是(shi)對用(yong)戶的(de)訪(fang)問權(quan)限加以控制,以保證系(xi)統的(de)安全(quan)性。