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