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