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