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