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