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