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