(數(shù)據(jù)庫原理)第4章標準查詢語言SQL_第1頁
(數(shù)據(jù)庫原理)第4章標準查詢語言SQL_第2頁
(數(shù)據(jù)庫原理)第4章標準查詢語言SQL_第3頁
(數(shù)據(jù)庫原理)第4章標準查詢語言SQL_第4頁
(數(shù)據(jù)庫原理)第4章標準查詢語言SQL_第5頁
已閱讀5頁,還剩72頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

數(shù)據(jù)庫原理與應用教程

第4章標準查詢語言SQL數(shù)據(jù)庫原理與應用教程標準查詢語言SQL結(jié)構(gòu)化查詢語言SQL(StructuredQueryLanguage)是關(guān)系數(shù)據(jù)庫系統(tǒng)的國際標準語言,它在大型或中小型數(shù)據(jù)庫中都能使用。SQL語言集數(shù)據(jù)定義(DDL)、數(shù)據(jù)操縱(DML)、數(shù)據(jù)控制(DCL)于一身,學會了它,等于學會了在各種關(guān)系型數(shù)據(jù)庫中,各種不同的DBMS中都能進行DDL、DML、DCL操作。本章主要敘述SQL語言的概念與特點、SQL語言的數(shù)據(jù)定義、SQL語言的數(shù)據(jù)查詢、SQL語言的數(shù)據(jù)更新、SQL語言處理視圖等方面知識,最后介紹了嵌入式SQL語言概念以及在VisualBasic、C#和Java中SQL語言的具體使用方法數(shù)據(jù)庫原理與應用教程

本章目錄

4.1SQL語言概述及其數(shù)據(jù)定義4.2SQL語言的數(shù)據(jù)查詢4.3SQL語言的數(shù)據(jù)更新與視圖4.4嵌入式SQL本章小結(jié)習題數(shù)據(jù)庫原理與應用教程4.1SQL語言概述及其數(shù)據(jù)定義SQL語言無論是在Oracle、Sybase、Informix、SQLServer這樣的大型數(shù)據(jù)庫管理系統(tǒng)中,還是在VisualFoxpro、Access這樣的中小型數(shù)據(jù)庫管理系統(tǒng)中都能獲得支持。本節(jié)首先說明SQL語言的發(fā)展過程和它的特點,然后就詳細介紹SQL語言對數(shù)據(jù)庫表、索引文件的定義方法。數(shù)據(jù)庫原理與應用教程SQL語言概述及其數(shù)據(jù)定義目錄4.1.1SQL語言的基本概念及其特點4.1.2SQL語言的數(shù)據(jù)定義4.1.3SQL對索引的創(chuàng)建與刪除數(shù)據(jù)庫原理與應用教程SQL語言的基本概念及其特點SQL語言的發(fā)展過程:1989年,美國國家標準局(ANSI)定義了關(guān)系型數(shù)據(jù)庫的SQL標準語言,稱為ANSISQL89,隨后,國際標準化組織采用這一標準,推出SQL89。1992年,國際標準化組織推出SQL92,也稱為SQL2。目前,SQL99正在起草中,其中增加了面向?qū)ο蠊δ埽卜Q為:SQL3。我國在1990年頌布“信息處理系統(tǒng)數(shù)據(jù)庫語言SQL”,把其定為國家標準。4.1.1SQL語言的基本概念及其特點數(shù)據(jù)庫原理與應用教程SQL語言是一種介于關(guān)系代數(shù)和關(guān)系演算之間的語言,其功能包括查詢、操縱、定義和控制4個方面,是一個通用的、功能極強的關(guān)系數(shù)據(jù)庫語言,它完全適合關(guān)系數(shù)據(jù)庫的三級模式結(jié)構(gòu)(外模式、模式、內(nèi)模式),遵循關(guān)系模型中3類完整性約束:實體完整性、參照完整性和自定義完整性。目前已成為關(guān)系數(shù)據(jù)庫的標準語言,廣泛應用于各種數(shù)據(jù)庫。數(shù)據(jù)庫原理與應用教程SQL語言的主要特點

(1)綜合統(tǒng)一。SQL語言集數(shù)據(jù)定義(DDL)、數(shù)據(jù)操縱(DML)、數(shù)據(jù)控制(DCL)于一體,語言風格統(tǒng)一,可以獨立完成數(shù)據(jù)庫中模式定義、建立數(shù)據(jù)庫表、錄入、查詢、更新、維護數(shù)據(jù)、數(shù)據(jù)庫重構(gòu)、數(shù)據(jù)庫安全控制等一系列操作。便得用戶的數(shù)據(jù)庫投入運行后,還可以根據(jù)實際需要,在不影響數(shù)據(jù)庫整體運行的情況下,修改數(shù)據(jù)庫模式,具有良好的擴充性。數(shù)據(jù)庫原理與應用教程SQL語言的主要特點(2)高度非過程化。SQL語言與各種關(guān)系數(shù)據(jù)庫DBMS中的語言一樣是一種高度非過程化語言。使用時,只要指明“做什么?”不必像高級語言那樣指明“怎樣做?”,因此用戶無需了解文件與數(shù)據(jù)的存取路徑,這種存取路徑的SQL語句的操作過程是由系統(tǒng)自動來完成。這不僅大大減輕了編程人員的負擔,還有利于提高數(shù)據(jù)的獨立性。數(shù)據(jù)庫原理與應用教程SQL語言的主要特點(3)面向集合的操作方式。SQL語言操作與各種關(guān)系數(shù)據(jù)庫DBMS中的語言一樣是面向集合的操作方式。這就是說,它的操作方式不是針對某一個數(shù)據(jù),而是針對一條記錄和符合條件的多條記錄進行的。例如,有一個班的學生關(guān)系(設(shè)為R)表,共有10多列內(nèi)容,任意條(有限)記錄,其中有1列是平均成績,當要顯示平均成績在80分以上同學的情況(10多列內(nèi)容一起顯示)時,只要使用下列一條簡單選擇語句,就或把符合條件的所有學生情況顯示出來:Select*FromRWhere平均成績>=80數(shù)據(jù)庫原理與應用教程SQL語言的主要特點(4)提供兩種不同格式的使用方式。SQL語言提供的兩種不同格式的使用方法是:自含式和嵌入式。所謂SQL的自含式語言,是和各種關(guān)系數(shù)據(jù)庫DBMS中的語言一樣,能夠獨立地用于聯(lián)機交互的使用方式,用戶可以在鍵盤上直接鍵入SQL命令對數(shù)據(jù)進行操作,當然也可以寫成代碼程序,在DBMS環(huán)境下運行;所謂SQL嵌入式語言,是把SQL語言的各種命令嵌入到高級語言程序中使用。這種方式可使高級語言與數(shù)據(jù)庫結(jié)合起來,克服高級語言處理大量數(shù)據(jù)效率不高的缺點,這在當今各種應用系統(tǒng)開發(fā)中發(fā)揮很大的作用。目前應用較多的高級語言是VisualBasic、C語言一簇(VC、C++、C#)、Java等。數(shù)據(jù)庫原理與應用教程SQL語言的主要特點(5)語言簡捷,易學易用。SQL語言功能強大,但語言本身卻很簡單。一套語言完成所有功能只使用9個動詞,它們是:查詢命令(Select)、數(shù)據(jù)定義中的創(chuàng)建(Create)、刪除(Drop)、修改(Alter)、數(shù)據(jù)操縱中插入(Insert)、修改(Update)、刪除(Delete)、數(shù)據(jù)控制中的權(quán)力授于(Grant)、權(quán)力回收(Revoke)。SQL語法簡單,接近口語,易學易用。數(shù)據(jù)庫原理與應用教程SQL語言的數(shù)據(jù)定義1.定義數(shù)據(jù)庫一般格式為:CREATEDATABASE<數(shù)據(jù)庫名>例如要建立一個教師(teacher)的數(shù)據(jù)庫,在查詢分析器中輸入命令:CREATEDATABASEteacher在SQLServer2005中,打開數(shù)據(jù)庫,就會見到teacher的名稱。4.1.2SQL語言的數(shù)據(jù)定義數(shù)據(jù)庫原理與應用教程SQL語言的數(shù)據(jù)定義2.定義基本表選擇teacher數(shù)據(jù)庫后,在查詢分析器中輸入建立基本表的命令就可以建立基本表,定義基本表的結(jié)構(gòu),格式形式為:CREATETABLE<基本表名>(<列名><數(shù)據(jù)類型>,……完整性約束,……)數(shù)據(jù)庫原理與應用教程SQL語言的數(shù)據(jù)定義定義數(shù)據(jù)表命令的說明:(1)<表名>:規(guī)定所創(chuàng)建的基本表的名稱。在一個數(shù)據(jù)庫中,不允許有兩個基本表同名。(2)<列名>:規(guī)定了該列(屬性)的名稱。一個表中不能有兩列同名。(3)<數(shù)據(jù)類型>:規(guī)定了該列的數(shù)據(jù)類型。各具體DBMS所提供的數(shù)據(jù)類型是不同的;本書使用的是SQLServer2005中規(guī)定的數(shù)據(jù)類型。(4)完整性約束:完整性約束規(guī)則在該命令中較為復雜,為了學習方便,沒有把命令的全部內(nèi)容一次寫出來,這里主要用到下列三類子句:數(shù)據(jù)庫原理與應用教程定義主鍵子句:Primarykey<屬性名1,…>檢查子句:Check(<條件>)外鍵子句:Constraint<約束名>ForeignKey<副表屬性名1…>References<主表屬性名1…>這里定義的主鍵一定要遵守實體完整性規(guī)則;外鍵一定要遵守參照完整性規(guī)則;檢查子句是遵守用戶自定義完整性規(guī)則。數(shù)據(jù)庫原理與應用教程定義數(shù)據(jù)庫內(nèi)基本表實例說明:(1)“教師”表:T,由教師編號(TNO)、姓名(TN)、性別(SEX)、年齡(AGE)、職稱(ZC)和所在專業(yè)(DEPT)6個屬性組成??捎洖椋篢(TNO,TN,SEX,AGE,ZC,DEPT)(2)“課程”表:C,由課程號(CNO)、課程名(CN)、課程性質(zhì)(CX)和學分(CT)4個屬性組成。可記為:C(CNO,CN,CX,CT)(3)“教師授課”表:TC,由教師編號(TNO)、課程號(CNO)、教齡(YEAR)3個屬性組成,這里的教齡是指教授這門課的教齡??捎洖椋篢C(TNO,CNO,YEAR)數(shù)據(jù)庫原理與應用教程定義“教師”表【例4.1】創(chuàng)建“教師”表T,其中教師編號是主鍵,姓名、性別和年齡不能為空,性別只能選“男”或“女”,年齡大于18歲。CREATETABLET(TNOCHAR(4)NOTNULL,TNCHAR(8)NOTNULL,SEXCHAR(2)NOTNULLCHECK(SEXIN('男','女')),AGEINTNOTNULLCHECK(AGE>18),ZCCHAR(10),DEPTVARCHAR(12),PRIMARYKEY(TNO))(應在實際環(huán)境中演示)數(shù)據(jù)庫原理與應用教程“教師”表數(shù)據(jù)庫原理與應用教程定義“課程”表【例4.2】建立“課程”表C,課程號CNO是主鍵,課程名CN和CT不能為空,CT大于1。CREATETABLEC(CNOCHAR(4)NOTNULL,CNVARCHAR(10)NOTNULL,CXCHAR(8),CTINTNOTNULLCHECK(CT>1),PRIMARYKEY(CNO))(應在實際環(huán)境中演示)數(shù)據(jù)庫原理與應用教程“課程”表數(shù)據(jù)庫原理與應用教程定義“教師授課”表【例4.3】建立“教師授課”表TC,定義TNO和CNO是外鍵盤同時又是該表的主鍵,教齡不為空,并且YEAR大于1。CREATETABLETC(TNOCHAR(4)NOTNULL,CNOCHAR(4)NOTNULL,YEARINTNOTNULLCHECK(YEAR>1),PRIMARYKEY(TNO,CNO),CONSTRAINTTC_TFOREIGNKEY(TNO)REFERENCEST(TNO),CONSTRAINTTC_CFOREIGNKEY(CNO)REFERENCESC(CNO))(應在實際環(huán)境中演示)數(shù)據(jù)庫原理與應用教程“教師授課”表數(shù)據(jù)庫原理與應用教程

修改基本表結(jié)構(gòu)

(1)增加屬性。格式:ALTERTABLE<基本表名>ADD<新屬性名><新屬性類型>【例4.4】在基本表T中增加一個聯(lián)系電話(TELE)屬性,可用下列語句:ALTERTABLETADDTELECHAR(13)注意:新增加的屬性不能定義為:NOTNULL,因為基本表在增加一個屬性后,原來所有記錄在新增加的屬性列上的值都被定義為空值(NULL)。(應在實際環(huán)境中演示)數(shù)據(jù)庫原理與應用教程修改基本表結(jié)構(gòu)

(2)修正原屬性數(shù)據(jù)類型。格式為:ALTERTABLE<基本表名>ALTERCOLUMN<新屬性名><新屬性類型>【例4.5】將T表中年齡的數(shù)據(jù)類型改為SMALLINT,可用下列語句:ALTERTABLETALTERCOLUMNAGESMALLINT修改原有的列定義,會使列中數(shù)據(jù)類型作新舊自動變化,有可能會破壞已有數(shù)據(jù)。(應在實際環(huán)境中演示)數(shù)據(jù)庫原理與應用教程修改基本表結(jié)構(gòu)(3)刪除原有屬性。格式為:ALTERTABLE<基本表名>DROPCOLUMN<屬性名>在基本表中刪除某一屬性時要注意,引用到該屬性的視圖和約束也會一起自動地被刪除?!纠?.6】在基本表T中刪除TELE屬性,可用下列語句:ALTERTABLETDROPCOLUMNTELE(應在實際環(huán)境中演示)數(shù)據(jù)庫原理與應用教程修改基本表結(jié)構(gòu)(4)禁止參照完整性約束。格式為:ALTERTABLE<基本表名>NOCHECKCONSTRAINT<約束名>【例4.7】禁止TC中參照完整性約束TC_T。ALTERTABLETCNOCHECKCONSTRAINTTC_T(應在實際環(huán)境中演示)數(shù)據(jù)庫原理與應用教程刪除基本表

刪除基本表命令的一般格式為:DROPTABLE<表名>【例4.8】刪除表T。DROPTABLET注意:刪除表需要相應的操作權(quán)限,一般只刪除自己建立的無用表,如有用表一定要備份或保存好建立該表的程序。(應在實際環(huán)境中演示)數(shù)據(jù)庫原理與應用教程SQL對索引的創(chuàng)建與刪除

1.索引的概念數(shù)據(jù)庫中的索引是為了加速對表中記錄的檢索而創(chuàng)建的一種分散存儲結(jié)構(gòu),是對表或視圖而建立的。索引建立后,如果改變了表或視圖中數(shù)據(jù),增加或減少記錄,系統(tǒng)會自動更新索引。當查詢到索引字段時,系統(tǒng)會自動使用索引進行查詢,查詢時的速度會比沒建索引快得多。4.1.3SQL對索引的創(chuàng)建與刪除數(shù)據(jù)庫原理與應用教程按照索引記錄存放的位置可以分為聚集索引(ClusteredIndex)與非聚集索引(NonClusteredIndex)兩類。聚集索引是指索引項的順序與表中記錄的物理順序一致的索引組織,檢索記錄的速度快。規(guī)定一個表中只能有一個屬性或?qū)傩越M,設(shè)定為聚集索引的字段,這一字段一定是查詢時用得最頻繁的。非聚集索引也按照索引的字段排列記錄,但是排列的結(jié)果不會存儲在表中,而是另外存儲,因此檢索記錄速度沒有聚集索引快。數(shù)據(jù)庫原理與應用教程SQL對索引的創(chuàng)建與刪除2.創(chuàng)建索引創(chuàng)建索引的語句其一般格式可以寫成:CREATE[UNIQUE][CLUSTERED|NONCLUSTERED]INDEX<索引名>ON{<表名>|<視圖名>}(<列名>[ASC|DESC][,...n])其中,UNIQUE表明建立唯一索引,CLUSTERED表示建立聚集索引,NONCLUSTERED表示建立非聚集索引。索引可以建在該表或視圖的一列或多列上,各列名之間用逗號分隔,每個<列名>后面還可以用<次序>指定索引值的排列次序,包括ASC(升序)和DESC(降序)兩種,缺省值為ASC。數(shù)據(jù)庫原理與應用教程SQL對索引的創(chuàng)建與刪除創(chuàng)建索引舉例:【例4.9】為teacher中的T、C、TC三個表建立索引。其中T表按教師編號升序建唯一索引,C表按課程號降序建立聚集索引,TC表按TNO升序、CNO降序建非聚集索引。CREATEUNIQUEINDEXT_TNOONT(TNO)CREATECLUSTEREDINDEXC_CNOONC(CNODESC)CREATENONCLUSTEREDINDEXTC_TNO_CNOONTC(TNOASC,CNODESC)(應在實際環(huán)境中演示)數(shù)據(jù)庫原理與應用教程SQL對索引的創(chuàng)建與刪除刪除索引刪除索引的一般格式為:DROPINDEX表名.<索引名>∣視圖名.<索引名>[,...n]【例4.10】刪除TC表中TC_TNO_CNO索引。DROPINDEXTC.TC_TNO_CNO值得用戶注意的是索引一旦建立,所在的DBMS系統(tǒng)會自動維護它,不需用戶關(guān)心,建立索引文件的目的是提高查詢速度,如果所建索引表的數(shù)據(jù)或記錄增減太頻繁,索引數(shù)目又多,每次打開表操作,系統(tǒng)會花費大量時間來維護這些索引,反而對加快查詢操作不利。因此用戶應根據(jù)具體情況,對數(shù)據(jù)庫表做索引。(應在實際環(huán)境中演示)數(shù)據(jù)庫原理與應用教程4.2SQL語言的數(shù)據(jù)查詢查詢是數(shù)據(jù)庫應用的核心內(nèi)容,用戶一定要深刻領(lǐng)會和熟練掌握它。SQL只提供一條查詢語句——SELECT,但該語句功能豐富,使用方法靈活,可以滿足用戶合理查詢的任何要求。本節(jié)詳細介紹了利用SELECT語句在各種情況下如何應用,并配合大量實例,初學者必須上機練習,并能舉一反三。使用SELECT語句時,用戶不需指明被查詢關(guān)系的路徑,只需要指出關(guān)系名,查詢什么,有何附加條件即可。SELECT既可以在基本表關(guān)系上查詢,也可以在視圖關(guān)系上查詢。數(shù)據(jù)庫原理與應用教程SQL語言的數(shù)據(jù)查詢目錄

4.2.1SELECT命令的格式及其含義4.2.2單表查詢4.2.3多表間連接和合并查詢4.2.4嵌套查詢4.2.5保存查詢結(jié)果及分步查詢數(shù)據(jù)庫原理與應用教程SELECT命令的格式SELECT語句的一般格式為:SELECT[ALL|DISTINCT]<目標列表達式>[,<目標列表達式>]...[INTO<新表名>]FROM<表名或視圖名>[,<表名或視圖名>]...[WHERE<條件表達式>][GROUPBY<列名1>...[HAVING<條件表達式>]][ORDERBY<列名2>[ASC|DESC]]...4.2.1SELECT命令的格式及其含義數(shù)據(jù)庫原理與應用教程SELECT命令的含義查詢語句從功能上分可分為4部分:(1)無條件的簡單查詢。使用SELECT和FROM格式(上述命令的前3行或1,3行)。(2)有條件的查詢,使用SELECT、FROM加上WHERE格式(上述命令的前4行或1,3,4行)。(3)如果要按各表中屬性分組查詢,可能要用到上述命令的前5行(或者1,3,4,5行)。(4)如果查詢結(jié)果的記錄要排序,一般情況下,可能要用到上述命令的1,3,4,6行。SELECT語句既可以完成簡單的單表查詢,也可以完成復雜的連接查詢或嵌套查詢。數(shù)據(jù)庫原理與應用教程單表查詢

1. 指定列或列表達式的查詢2. 消除重復行的查詢3. 條件子句的使用4.分組查詢5. 排序查詢注意:所的實例都應在實際環(huán)境中演示,這方面課件略4.2.2單表查詢數(shù)據(jù)庫原理與應用教程4.2.3多表間連接和合并查詢1.等值與非等值連接查詢2.自身連接3.外連接

4.合并查詢注意:所的實例都應在實際環(huán)境中演示4.2.3多表間連接和合并查詢1.等值與非等值連接查詢其一般格式為:[<表名1>.]<列名1><比較運算符>[<表名2>.]<列名2>當比較運算符為“=”時,稱為等值連接。使用其它運算符稱為非等值連接。[例4.34]查詢職稱為講師的授課情況。SELECT*FROMT,TCWHERET.TNO=TC.TNOANDZC=‘講師’[例4.35]對T表和TC表作講師的自然連接。SELECTt.*,CNO,YEARFROMT,TCWHERET.TNO=TC.TNOANDZC=‘講師’多表中遇到相同的字段名時,應指明是哪個表的。2.自身連接連接操作不僅可以在兩個表之間進行,也可以是一個表與其自己進行連接,這種連接稱為自身連接。只有當對某一表進行多次掃描時才要進行自身連接。[例4.36]查詢比鄒敏老師年齡大的老師的姓名,年齡和鄒敏的年齡。SELECTX.TNAS姓名,X.AGEAS年齡,Y.AGEAS鄒敏的年齡FROMTASX,TASYWHEREX.AGE>Y.AGEANDY.TN=‘鄒敏’3.外連接外連接概念與第3章中的外連接概念完全一樣,目的是為了保存無條件連接的本來要刪除的記錄信息。FULL[OUTER]JOINLEFT[OUTER]JOINRIGHT[OUTER]JOIN例4.37略4.合并查詢合并查詢結(jié)果就是使用UNION操作符將來自不同查詢的數(shù)據(jù)組合起來,形成一個具有綜合信息的查詢結(jié)果該操作全自動將重復的數(shù)據(jù)行剔除。各子查詢使用的表結(jié)構(gòu)應該相同。[例4.38]從TC表中查詢出教師編號為“S4”和“S5”的教師編號和總教齡。SELECTTNOAS教師編號,SUM(YEAR)AS總教齡FROMTCWHERETNO=‘S4’GROUPBYTNOUNIONSELECTTNOAS教師編號,SUM(YEAR)AS總教齡FROMTCWHERETNO=‘S5’GROUPBYTNOSELECTTNOAS教師編號,SUM(YEAR)AS總教齡FROMTCWHERETNO=‘S4’ORTNO=‘S5’GROUPBYTNO數(shù)據(jù)庫原理與應用教程嵌套查詢1.帶有IN謂詞和比較運算符的子查詢2.帶有ANY或ALL謂詞的子查詢3.帶有EXISTS謂詞的子查詢注意:所的實例都應在實際環(huán)境中演示,這方面課件略4.2.4嵌套查詢數(shù)據(jù)庫原理與應用教程對于EXISTS謂詞的說明使用存在量詞EXISTS后,若內(nèi)層檢查非空,則外層的WHERE子句返回真值,否則返回假值。用EXISTS謂詞相反意義的是NOTESISTS。使用謂詞NOTEXISTS后,若內(nèi)層查詢結(jié)果為空,則外層的WHERE子句返回真值,否則返回假值。數(shù)據(jù)庫原理與應用教程保存查詢結(jié)果及分步查詢1.保存查詢的結(jié)果

2.分步查詢注意:所的實例都應在實際環(huán)境中演示,這方面課件略4.2.5保存查詢結(jié)果及分步查詢數(shù)據(jù)庫原理與應用教程4.3SQL語言的數(shù)據(jù)更新與視圖SQL語言中的數(shù)據(jù)更新命令(包括數(shù)據(jù)插入、修改、刪除、視圖處理等)是數(shù)據(jù)操縱功能中的重要組成部分,是維護數(shù)據(jù)表中數(shù)據(jù)正確的重要要操作方法,大家應該熟練掌握它們。數(shù)據(jù)庫原理與應用教程SQL語言的數(shù)據(jù)更新與視圖目錄4.3.1插入數(shù)據(jù)1.插入記錄2.插入子查詢結(jié)果4.3.2修改數(shù)據(jù)1.修改某一個記錄的值2.帶子查詢的修改語句4.3.3刪除數(shù)據(jù)1.刪除表中記錄2.帶子查詢的刪除語句注意:所的實例都應在實際環(huán)境中演示,這方面課件略數(shù)據(jù)庫原理與應用教程視圖創(chuàng)建、刪除與更新

1.視圖的概念視圖是數(shù)據(jù)庫系統(tǒng)三級模式中外模式的主要形式之一,開發(fā)數(shù)據(jù)庫系統(tǒng)程序編寫相當部分也是根據(jù)視圖來編寫的,因此用戶必須要掌握視圖知識。視圖是根據(jù)基本表(一至多個基本表或已有的視圖)導出的關(guān)系。當基本表中數(shù)據(jù)變化時,可以從視圖中反映出來,在一定條件下,也可以通過視圖中數(shù)據(jù)更新來改變基本表中的數(shù)據(jù)。在創(chuàng)建視圖時,并不存儲視圖中的數(shù)據(jù),而是在用戶使用視圖時才去顯示對應的數(shù)據(jù),因此視圖被稱為“虛表”。視圖在很多方面與基本表相同,當視圖一經(jīng)定義,可以與基本表一樣被查詢、刪除,也可以再定義新的視圖,但對視圖的更新操作有一定的限制。數(shù)據(jù)庫原理與應用教程視圖創(chuàng)建、刪除與更新2.創(chuàng)建視圖SQL語言用CREATEVIEW命令建立視圖,其一般格式為:CREATEVIEW<視圖名>[(<列名>[,<列名>]...)]AS<子查詢>其中子查詢可以是任意復雜的SELECT語句,但通常不允許含有ORDERBY子句和DISTINCT短語。注意:所的實例都應在實際環(huán)境中演示,這方面課件略數(shù)據(jù)庫原理與應用教程創(chuàng)建視圖的注意點如果CREATEVIEW語句僅指定了視圖名,省略了組成視圖的各個屬性列名,則隱含該視圖由子查詢中SELECT子句目標列中的諸字段組成。在以下情況下必須明確指定組成視圖的所有列名。(1)其中某個目標列不是單純的屬性名,而是集函數(shù)或列表達式。(2)多表連接時選出了幾個同名列作為視圖的字段。(3)需要在視圖中為某個列啟用新的更合適的名字。注意:所的實例都應在實際環(huán)境中演示,這方面課件略數(shù)據(jù)庫原理與應用教程視圖的刪除和更新3.刪除視圖語句的格式為:DROPVIEW<視圖名>一個視圖被刪除后,由此視圖導出的其他視圖也將失效,用戶應該使用DROPVIEW語句將他們一起刪除。4.更新視圖更新視圖包括插入(INSERT)、刪除(DELETE)和修改(UPDATE)三類操作。注意:所的實例都應在實際環(huán)境中演示,這方面課件略數(shù)據(jù)庫原理與應用教程更新視圖數(shù)據(jù)的一般要求(1)如果一個視圖是從多個基本表使用連接操作導出的,則此視圖不允許更新。(2)如果在導出視圖的過程中,使用了分組和聚合操作,也不允許該視圖更新。(3)若視圖的字段來自字段表達式或常量,則不允許對此視圖執(zhí)行INSERT和UPDATE操作,但可以進行DELETE操作。(4)若視圖定義中含有GROUPBY、DISTINCT短語或嵌套查詢,且內(nèi)層查詢的FROM子句中涉及的表也是導出該視圖的基本表,則此視圖不允許更新。數(shù)據(jù)庫原理與應用教程SQL數(shù)據(jù)控制數(shù)據(jù)庫中的數(shù)據(jù)由多個用戶共享,為保證數(shù)據(jù)庫的安全,SQL語言提供數(shù)據(jù)控制語句(DataControlLanguage,DCL)對數(shù)據(jù)庫進行統(tǒng)一的控制管理。SQL數(shù)據(jù)控制語句有2個命令動詞,一個是GRANT語句,是系統(tǒng)對下級用戶授予權(quán)限;另一個是REVOKE語句,是系統(tǒng)對下級用戶授予權(quán)限后的回收。這些內(nèi)容均在本課程的下續(xù)課程“大型數(shù)據(jù)庫系統(tǒng)”一書中詳細講解,本課程只講解單機系統(tǒng),在此不作介紹,有興趣的用戶可參考相關(guān)書籍。數(shù)據(jù)庫原理與應用教程4.4嵌入式SQL

在目前許多數(shù)據(jù)庫應用系統(tǒng)開發(fā)中,嵌入式SQL語言是開發(fā)平臺與數(shù)據(jù)庫聯(lián)系的重要橋梁,它的具體應用是本課程要求學會的最重要的實踐知識,也是計算機有關(guān)專業(yè)在軟件開發(fā)中要具體應用的重要的基本方法。本節(jié)介紹了嵌入式SQL的基本工作方式,并對以VisualBasic、C#、Java三種高級語言為平臺,與SQLServer結(jié)合開發(fā)程序的方法作了實例說明。在教學時,可根據(jù)學生學習高級語言的實際情況,可選擇其中一種已學過的高級語言進行實踐教學。數(shù)據(jù)庫原理與應用教程4.4嵌入式SQL目錄4.4.1嵌入式SQL語言介紹4.4.2VB平臺下的嵌入式SQL語言4.4.3C#平臺下的嵌入式SQL語言4.4.4Java平臺下的嵌入式SQL語言注意:4.4.2-4.4.3內(nèi)容是根據(jù)各學校對學生已學過的高級語言不同而選擇的內(nèi)容,課件略,這里僅介紹4.4.1節(jié)內(nèi)容。數(shù)據(jù)庫原理與應用教程嵌入式SQL語言介紹(1)1.嵌入式SQL概念從本章開始講述的SQL特點中知道,前面介紹的SQL語言在SQLServer中的各種應用是屬于自含式語言,嵌入式SQL語言是將SQL語言各種命令嵌入到某種高級語言中,利用高級語言的過程性結(jié)構(gòu)來彌補SQL語言在實現(xiàn)邏輯關(guān)系復雜應用方面的不足,這種方式下使用的SQL語言稱為嵌入式SQL(EmbeddedSQL)。數(shù)據(jù)庫原理與應用教程嵌入式SQL語言介紹(2)能夠使用SQL語句的高級語言稱為主語言或宿主語言。目前使用比較廣泛的宿主語言有VB、PB、C#、VB.NET、DELPHI、JAVA等。不管使用什么宿主語言,凡是通過SQL來對數(shù)據(jù)庫操作均稱為嵌入式SQL應用。數(shù)據(jù)庫原理與應用教程嵌入式SQL語言的處理方法在宿主語言中,對于嵌入的SQL語句,一般可用兩種方法處理:一種是把嵌入的SQL語句先進行編譯,使它們能被宿主語言識別與運行,這種方式稱為預編譯;另一種方式是修改或擴充宿主語言的功能,使之能夠把SQL語句的命令看作和本身語言命令一樣能給于解釋和執(zhí)行。后一種方法改動太大,目前采用較多的是第一種方法。數(shù)據(jù)庫原理與應用教程嵌入式SQL語言預編譯的處理方法宿主語言+SQL源程序預編譯系統(tǒng)宿主語言源程序(含SQL)宿主語言編譯系統(tǒng)目標程序連接數(shù)據(jù)庫并運行

處理過程如課本圖4.45所示。宿主語言+SQL源程序→預編繹系統(tǒng)→宿主語言源程序(含SQL)→宿主語言的編繹系統(tǒng)→目標程序→連接數(shù)據(jù)庫并運行。數(shù)據(jù)庫原理與應用教程嵌入式SQL語言在數(shù)據(jù)庫系統(tǒng)開發(fā)中的重要作用

目前使用的中小型或大型數(shù)據(jù)庫系統(tǒng),都具有數(shù)據(jù)整體結(jié)構(gòu)化、數(shù)據(jù)共享性高、冗余度小、易擴充、數(shù)據(jù)獨立性高的優(yōu)點,還具有數(shù)據(jù)安全性控制、完整性約束、并發(fā)控制、數(shù)據(jù)庫恢復、集合式操作等特點,這是任何一種高級語言所不具備的。一般高級語言,特別是面向?qū)ο蟮母呒壵Z言具有:邏輯運算功能強、運算速度快、集成開發(fā)環(huán)境好的特點,這一點同樣是各種數(shù)據(jù)庫系統(tǒng)較為遜色的功能。要設(shè)計一個優(yōu)秀的數(shù)據(jù)庫應用系統(tǒng),一定要具有以上所講的二者優(yōu)點,使用SQL語言就可以把兩者結(jié)合起來。數(shù)據(jù)庫原理與應用教程嵌入式SQL語言在數(shù)據(jù)庫系統(tǒng)開發(fā)中的實例介紹實例介紹以VB、C#、Java三種高級語言為平臺,與SQLServer數(shù)據(jù)庫相結(jié)合,開發(fā)各種數(shù)據(jù)庫應用系統(tǒng)的基本方法。教學時可根據(jù)學生學習高級語言的具體情況,選擇其中一種教學,務(wù)求學生掌握這種方法,并能在本課程設(shè)計中加以應用。在SQLServer中建一個學生數(shù)據(jù)庫STUDENT,在此數(shù)據(jù)庫中建一個學生成績的數(shù)據(jù)表:XC。表記錄字段為:學號(NO),姓名(NAME),性別(SEX),年齡(AGE),基礎(chǔ)課程(BC),實踐課程(PC),專業(yè)課程(SC)和畢業(yè)考試(GT)。關(guān)系模式為:XC(NO,NAME,SEX,AGE,BC,PC,SC,GT)利用以上所講的三種高級語言為平臺,使用SQL語言,能對XC表中的任意內(nèi)容作查詢和修改數(shù)據(jù)的操作。數(shù)據(jù)庫原理與應用教程嵌入式SQL語言在數(shù)據(jù)庫系統(tǒng)開發(fā)中的實例介紹數(shù)據(jù)庫原理與應用教程本章小結(jié)

1.由于SQL語言具有高度綜合統(tǒng)一、高度非過程化、面向集合操作模式、包括自含式和嵌入式兩種使用方式、語言易學易用等5大特點,注定要成為標準的、使用廣泛的最重要語言。SQL定義語言包括創(chuàng)建、修改、刪除數(shù)據(jù)庫表及其數(shù)據(jù)庫表之間的完整性約束方法,也包括對數(shù)據(jù)庫表創(chuàng)建、修改、刪除索引的基本方法。這些內(nèi)容都是重要的實踐知識,必須牢固掌握。2.Select查詢語句是SQL操縱語言中應用最多的語句,應該熟練掌握各種查詢數(shù)據(jù)方法,包括利用比較運算符、確定范圍、確定集合、字符匹配、空值和多重條件的查詢;分組查詢和排序查詢;多表間的各種連接查詢;各種嵌套查詢等內(nèi)容。3.SQL操縱語言另一重要內(nèi)容是對數(shù)據(jù)庫表中的數(shù)據(jù)進行插入、修改和刪除操作。這些操作方法與視圖的建立、修改、查詢、刪除等知識,都是需要掌握的重要內(nèi)容。4.鑒于嵌入式SQL語言在目前數(shù)據(jù)庫應用系統(tǒng)開發(fā)中的重要地位,應對它的工作方式有明確的認識,要掌握以VB、C#、Java語言為平臺中至少一種,與SQLServer結(jié)合起來,開發(fā)數(shù)據(jù)庫應用系統(tǒng)的編程方法,編寫的程序都能在計算機上正確運行。數(shù)據(jù)庫原理與應用教程習題一、選擇題1.在SQL語言中,增加或刪除數(shù)據(jù)庫表中的字段名所使用的命令動詞是()。A.a(chǎn)lter和updateB.drop和deleteC.alter和dropD.update和delete2.SQL語言的綜合統(tǒng)一特點是指()。A.能創(chuàng)建、修改和刪除數(shù)據(jù)庫表,能遵守完整性約束規(guī)則B.能對數(shù)據(jù)庫和數(shù)據(jù)庫表中數(shù)據(jù)進行插入、修改和刪除操作,并能創(chuàng)建、修改、查詢和刪除操作C.能對它的用戶授予或回收各種操作權(quán)限D(zhuǎn).集有DDL、DML和DCL語言于一體3.在嵌入式SQL語言中,使用的某種高級語言稱為()。A.主體語言B.配合語言C.宿主語言D.不完整4.設(shè)有關(guān)系R=(A1,A2,A3)。與SQL語句SELECTDISTINCTA3FROMRWHEREA2=’S3’等價的關(guān)系代數(shù)表達式是________。A.πA3(R)B.σA2=’S3’(R)C.πA3(σA2=’S3’(R))D.σA2=’S3’(πA3(R))5.兩個子查詢的結(jié)果()時,可以執(zhí)行并、交、差操作。A.結(jié)構(gòu)完全一致B.結(jié)構(gòu)完全不一致C.結(jié)構(gòu)部分一致C.主鍵一致數(shù)據(jù)庫原理與應用教程習題6.在SQL查詢語句中,用于合并查詢的謂詞是()。A.ExistsB.UniqueC.SomeD.All7.使用SQL語句進行查詢操作時,若希望查詢出全部存在的元組,一般使用()保留字。A.UniqueB.AllC.ExceptD.Distinct8.操作視圖不可能完成的功能是()。A.更新視圖中的數(shù)據(jù)B.查詢視圖中的內(nèi)容C.定義新的基本表D.定義新視圖9.SQL中涉及屬性所學專業(yè)Dept是否是空值的比較操作,寫法()是錯誤的。A.Dept=NullB.Not(DeptIsNull)C.DeptIsNullD.DeptIsNotNull10.假定學生關(guān)系是S(S#,Sname,Sex,Age),課程關(guān)系是C(C#,CName,TEACHER),學生選課關(guān)系是SC(S#,C#,Grade)。要查找選修“數(shù)據(jù)結(jié)構(gòu)”課程(指Cname字段)“男”學生學號,將涉及到關(guān)系()。A.S,CB.SC,CC.S,SCD.S,SC,C數(shù)據(jù)庫原理與應用教程習題二、填空題1.SQL語言集DDL、DML、DCL語言于一體,操作命令CREATE、DROP、ALTER是屬于_________語言。2.SQL語言提供兩種使用方法,它們是________語言和________語言。3.SQL語言中刪除數(shù)據(jù)庫表使用_____________命令,刪除數(shù)據(jù)庫表中數(shù)據(jù)使用_____________命令。4.視圖是數(shù)據(jù)庫系統(tǒng)三級結(jié)構(gòu)中的外模式的主要形式,它是從______________________導出的表。5.視圖是虛表,它

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論