下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第3章數(shù)據(jù)庫(kù)語言本章學(xué)習(xí)要求:
1.數(shù)據(jù)庫(kù)的用戶接口了解什么是數(shù)據(jù)庫(kù)的用戶接口?數(shù)據(jù)庫(kù)語言與宿主語言的區(qū)別。
2.SQL語言概況了解SQL的4大功能.3.SQL數(shù)據(jù)定義語言了解基表和視圖的概念以及各種數(shù)據(jù)類型。掌握基表模式的定義和修改基表模式的7條命令。4.
SQL查詢語言掌握最常用最基本的查詢語句的定義和應(yīng)用。5.SQL中的視圖了解視圖的概念以及視圖與基表的區(qū)別;掌握視圖的定義和操作。6.嵌入式SQL
掌握嵌入式SQL解決四個(gè)問題的手段。3.1數(shù)據(jù)庫(kù)的用戶接口
DBMS提供操作命令和語言,使用戶能夠?qū)?shù)據(jù)庫(kù)進(jìn)行各式各樣的操作,例如查詢、增、刪、改數(shù)據(jù),定義、修改數(shù)據(jù)模式等———這就構(gòu)成了用戶和數(shù)據(jù)庫(kù)的接口。
DBMS所提供的語言一般局限于對(duì)數(shù)據(jù)庫(kù)的操作,有別于計(jì)算完備的程序設(shè)計(jì)語言,稱為數(shù)據(jù)庫(kù)語言(databaselanguage)。
過程性語言——以關(guān)系代數(shù)為基礎(chǔ)設(shè)計(jì)出的數(shù)據(jù)庫(kù)語言。即用戶不但要說明需要什么數(shù)據(jù),而且還要說明獲得這些數(shù)據(jù)的過程。
非過程性語言——用戶只要說明需要的數(shù)據(jù),而如何獲得這些數(shù)據(jù)則不必由用戶說明,而由系統(tǒng)來實(shí)現(xiàn)。
層次和網(wǎng)狀數(shù)據(jù)庫(kù)的語言一般都是過程性的,而關(guān)系數(shù)據(jù)模型的抽象級(jí)別較高,比較簡(jiǎn)單,且有明確的數(shù)學(xué)定義。用戶只須了解邏輯模式,不必關(guān)心物理存儲(chǔ)的細(xì)節(jié),這就為設(shè)計(jì)非過程關(guān)系數(shù)據(jù)庫(kù)語言提供了良好的基礎(chǔ)。
SQL語言是非過程關(guān)系數(shù)據(jù)庫(kù)語言。
它將描述操作過程的麻煩由用戶轉(zhuǎn)嫁給了系統(tǒng)!數(shù)據(jù)庫(kù)語言本身不是計(jì)算完備的語言,不能用來獨(dú)立編制應(yīng)用程序。目前常用方法是將數(shù)據(jù)庫(kù)語言嵌入到一種高級(jí)程序設(shè)計(jì)語言中(如C)。這種高級(jí)程序設(shè)計(jì)語言稱為數(shù)據(jù)庫(kù)語言的宿主語言。數(shù)據(jù)庫(kù)語言與宿主語言的區(qū)別:
數(shù)據(jù)庫(kù)語言是非過程性語言,是面向集合的語言,主要用于訪問數(shù)據(jù)庫(kù);
宿主語言是過程性語言,主要用于處理數(shù)據(jù)。3.2SQL(StructuredQueryLanguage)
語言概況
SQL按其功能可分為4大部分:1數(shù)據(jù)定義語言(DDL)
用于定義、撤消和修改數(shù)據(jù)模式,如表、視圖、索引;
2查詢語言(QL)
用于查詢數(shù)據(jù);
3數(shù)據(jù)操作縱語言(DML)
用于增、刪、改數(shù)據(jù);
4數(shù)據(jù)控制語言(DCL)用于數(shù)據(jù)訪問權(quán)限的控制。3.3SQL數(shù)據(jù)定義語言關(guān)系稱為表,是關(guān)系數(shù)據(jù)庫(kù)的基本組成單位。在SQL中,表分為兩種:
基表(basetable)--數(shù)據(jù)顯式地存儲(chǔ)在數(shù)據(jù)庫(kù)中。視圖(view)
視圖是個(gè)虛表。僅有邏輯定義,可根據(jù)其定義由其它表(視圖)導(dǎo)出,但不作為一個(gè)表顯式地存儲(chǔ)在數(shù)據(jù)庫(kù)中。視圖可像基表一樣,參與各種數(shù)據(jù)庫(kù)操作。(2)臨時(shí)視圖對(duì)于較復(fù)雜的查詢,可將查詢中相對(duì)獨(dú)立部分作為查詢的中間結(jié)果,定義為臨時(shí)視圖。臨時(shí)視圖在功能上與普通視圖一樣,但僅用于附在臨時(shí)視圖定義后的查詢語句中。該查詢語句結(jié)束后,臨時(shí)視圖隨之自行消失。(1)普通視圖一般SQL都支持的數(shù)據(jù)類型見表3-1。3.3.2基表模式的定義
定義基表模式語句的格式見圖3-1所示。圖中橢圓形框中的內(nèi)容是關(guān)鍵字;方框中的內(nèi)容是非終極符;圓圈中的內(nèi)容是終極符。非終極符終極符此列不得設(shè)置為空列值不得重復(fù)當(dāng)此列的值空缺時(shí),填以缺省值定義外鍵來自的表名,即主表名
引用完整性檢查,主表中被引用的主鍵刪除時(shí)用
關(guān)鍵字
SETNULL------該列應(yīng)無NOTNULL說明
RESTRICT------凡被基表引用的主鍵,不得刪除;加下劃線表示為ONDELETE的缺省項(xiàng)
CASCADE-------如主表中刪除了某一主鍵,則基表中引用此主鍵的行也被刪除ONDELETE的三個(gè)選項(xiàng):例3-1
定義STUDENT(學(xué)生),COURSE(課程),SC(選課)三個(gè)基表。
(SNOCHAR(7)NOTNULL,SNAMEVARCHAR(8)NOTNULL,SEXCHAR(2)NOTNULL,BDATEDATENOTNULL,HEIGHTDEC(5,2)DEFAULT000.00,
PRIMARYKEY(SNO));CREATE
TABLE
STUDENT
/*建立學(xué)生表*/“;”不是SQL語句的一部分,而是命令結(jié)束符CREATETABLE
COURSE/*建立課程表*/(CNOCHAR(6)NOTNULL,LHOURSMALLINTNOTNULL,CREDITDET(1,0)NOTNULL,SEMESTERCHAR(2)NOTNULL,
PRIMARYKEY(CNO));CREATETABLE
SC
/*建立選課基表*/(SNOCHAR(7)NOTNULL,CNOCHAR(6)NOTNULL,GRADEDEC(4,1)DEFAULTNULL,PRIMARYKEY(SNO,CNO),F(xiàn)OREIGNKEY(SNO)
REFERENCESSTUDENT
ONDELETE
CASCADE,F(xiàn)OREIGNKEY(CNO)
REFERENCESCOURSE
ONDELETE
RESTRICT);
外鍵來自STUDENT表如主表中刪除了某一主鍵,則加此選項(xiàng)的基表中引用此主鍵的行也隨之刪除凡是被基表引用的主鍵,不得刪除3.3.3基表模式的修改
SQL提供7種修改基表模式的命令:1.增加列ALTERTABLE[<表的創(chuàng)建者名>.]<表名>
ADD<列名><類型>;注:[]內(nèi)為任選項(xiàng)。如果用戶本身就是被修改的表的創(chuàng)建者,則可略去表的創(chuàng)建者名,否則不可略去。注:SQL未提供刪除列的命令。(為什么?)2.刪除基表
DROPTABLE<表名>;若要?jiǎng)h除列,只有另定義一個(gè)新表,并將原來表中要保留的列的內(nèi)容復(fù)制到新表中,然后刪除原表。最后還得用重命名命令把新表改為原表名。3.補(bǔ)充定義主鍵如果原表以前未定義主鍵,需要時(shí)可利用此命令補(bǔ)充定義主鍵。ALTERTABLE<表名>
ADDPRIMARYKEY(.<列名表>)4.撤消主鍵定義一般情況下,一個(gè)基表如果已定義了主鍵,則系統(tǒng)會(huì)在主鍵上自動(dòng)建立索引。當(dāng)插入新行時(shí),系統(tǒng)會(huì)進(jìn)行主鍵唯一性檢查,這樣,當(dāng)進(jìn)行大量的插入操作時(shí),勢(shì)必影響系統(tǒng)效率。
下面命令暫時(shí)撤消主鍵。ALTERTABLE<表名>
DROPPRIMARYKEY;5.補(bǔ)充定義外鍵ALTERTABLE<表名-1>
ADDFOREIGNKEY[<外鍵名>](<列名表>)
REFERENCES<表名-2>[ONDELETE{RESTRICT|CASCADE|SETNULL}];
花括號(hào)表示三項(xiàng)中任選一項(xiàng)。有橫線表示缺省項(xiàng)。
6.撤消外鍵定義由于定義外鍵后,須作引用完整性檢查,這會(huì)影響系統(tǒng)性能,因此,SQL提供了撤消外鍵的命令,必要時(shí)可暫時(shí)撤消。ALTERTABLE<表名>
DROP<外鍵名>;7.定義和撤消別名CREATESYNONYM<標(biāo)識(shí)符>
FOR<表的創(chuàng)建者>.{<表名>|<視圖名>};DROPSYNONYM<標(biāo)識(shí)符>;3.3.4索引的建立和撤消索引的建立和撤銷語句的格式如圖3-2所示.在圖3-2(a)中,UNIQUE是可選項(xiàng);如果加了UNIQUE,則每個(gè)索引屬性值只能對(duì)應(yīng)一個(gè)元組,即此索引屬性是主鍵或候補(bǔ)鍵。圖3-2(a)中的列名就是指索引屬性。如果列名后加ASC,表示索引屬性按升序排列;如果列名后加DESC,表示索引屬性按降序排列。例:CREATEINDEXH_INDEXONSTUDENT(HEIGHT);即:對(duì)STUDENT文件建立以HEIGHT為索引值的索引文件。CREATEUNIQUEINDEXSC_INDEXONSC(SNODESC,CNOASC);
即:對(duì)選課文件SC按學(xué)號(hào)屬性降序、按課程號(hào)屬性升序建立索引文件。
3.4SQL查詢語言3.4.1基本SQL查詢語句
SQL查詢語句的具體形式見圖3-3。SELECT——指出要查詢的項(xiàng)目,通常指列名或表達(dá)式,是必需的。FROM——指明被查詢的表或視圖名,是必需的。WHERE——說明查詢條件,是任選的。GROUPBY——將表按列的值分組,是任選的。ORDERBY——將查詢結(jié)果排序,是任選的。3.4.1基本SQL查詢語言3.4.2查詢條件比較復(fù)雜的SQL查詢語句例3-2查詢STUDENT、COURSE、SC三表的全部?jī)?nèi)容。語句:
SELECT*FROMSTUDENT;查詢結(jié)果為:
SNOSNAMESEXBDATEHEIGHT9309203歐陽美林女1975-6-31.629208123王義平男1974-8-201.719104421周遠(yuǎn)行男1973-7-161.839309119李維女1976-8-101.689209120王大力男1973-10-201.75語句:SELECT
*FROM
COURSE;查詢結(jié)果為:
CNOLHOURCREDITSEMESTERCS-110603秋CS-201804春CS-221402秋EE-1221065秋EE-201452春語句:SELECT*FROMSC查詢結(jié)果為:
SNOCNOGRADE9309203CS-11082.59309203CS-201809309203EE-201759208123EE-122919208123EE-201839104421EE-2011009104421CS-110919309119CS-110729309119CS-201659209120CS-221
例3-3查詢所有女學(xué)生的身高(以厘米表示)。語句:SELECTSNAME,100*HEIGHT
FROMSTUDENT
WHERESEX=’女’;SNAME100*HEIGHT歐陽美林162李維168查詢結(jié)果為:補(bǔ)充1:檢索學(xué)習(xí)課程號(hào)為CS-221的學(xué)生學(xué)號(hào)與姓名。這個(gè)查詢要從兩個(gè)關(guān)系中檢索數(shù)據(jù),因而有多種寫法。第一種寫法(聯(lián)接查詢):
SELECTSTUDENT.SNO,SNAMEFROMSTUDENT,SCWHERESTUDENT.SNO=SC.SNO
ANDCNO=‘CS-221’該語句執(zhí)行時(shí),要對(duì)STUDENT和SC做笛卡爾積操作。由于SNO在STUDENT和SC中都出現(xiàn),因此引用SNO時(shí)需注明關(guān)系名,例如STUDENT.SNO。第二種寫法(嵌套查詢):
SELECTSNO,SNAMEFROMSTUDENTWHERESNOIN
(SELECTSNO
FROM
SC
WHERE
CNO=‘CS-221’)謂詞嵌套的子查詢中SELECT語句在外層查詢處理之前求解。即:先在表SC中求出選修課程CS-221的SNO,再在STUDENT表中根據(jù)SNO值求出SNAME值。注:當(dāng)查詢涉及多個(gè)關(guān)系時(shí),用嵌套查詢逐次求解層次分明,具有結(jié)構(gòu)程序設(shè)計(jì)特點(diǎn),并且嵌套查詢的執(zhí)行效率也比聯(lián)接查詢的笛卡兒效率高。第三種寫法;(使用存在量詞的嵌套查詢)
SELECTSNO,SNAME
FROMSTUDENT
WHERE
EXISTS
(SELECT*
FROM
SC
WHERE
SC.SNO=STUDENT.SNO
ANDCNO=‘CS-221’)存在量詞EXISTS是存在量詞,表示內(nèi)層查詢結(jié)果非空。例3-4查詢1976年出生的學(xué)生名及其秋季所修課程的課程號(hào)及成績(jī)。此題的查詢條件:1976年出生,秋季此題的查詢內(nèi)容:學(xué)生名,課程號(hào),成績(jī)語句:
SELECTSNAME,COURSE.CNO,GRADE
FROMSTUDENT,COURSE,SC
WHERESTUDENT.SNO=SC.SNO
ANDSC.CNO=COURSE.CNO
ANDYEAR(BDATE)=1976
ANDSEMESTER=’秋’;SNOSNAMESEXBDATEHEIGHT9309203歐陽美林女1975-6-31.629208123王義平男1974-8-201.719104421周遠(yuǎn)行男1973-7-161.839309119李維女1976-8-101.689209120王大力男1973-10-201.75CNOLHOURCREDITSEMESTERCS-110603秋CS-201804春CS-221402秋EE-1221065秋EE-201452春SNOCNOGRADE9309203CS-11082.59309203CS-201809309203EE-201759208123EE-122919208123EE-201839104421EE-2011009104421CS-110919309119CS-110729309119CS-201659209120CS-221
查詢結(jié)果為:SNAMECNOGRADE李維CS-11072例3-5
查詢秋季學(xué)期有一門以上課程獲90分以上成績(jī)的學(xué)生名。語句:
SELECT
SNAME
FROMSTUDENT
WHERESNOIN(SELECTSNO
FROMSC
WHEREGRADE>=90.0
ANDCNOIN(SELECTCNO
FROMCOURSE
WHERE
SEMESTER=‘秋’));
謂詞
查詢結(jié)果為:SNAME王義平周遠(yuǎn)行集合成員資格比較:(集合1)IN(集合2)(集合1)NOTIN(集合2)集合1與集合2可以是一個(gè)SELECT子查詢,或是值的集合,但它們的結(jié)構(gòu)相同。IN操作表示:如果集合1中每個(gè)元素都在集合2內(nèi),那么其邏輯值為true,否則為false;NOTIN操作表示:如果集合1中某個(gè)元素不在集合2內(nèi),那么其邏輯值為true,否則為false;例3-6
查詢只有一人選修的課程號(hào)。語句:SELECTCNOFROMSCSCXWHERECNONOTIN(SELECTCNO
FROMSC
WHERESNO<>SCX.SNO);別名不同層次上對(duì)同一個(gè)表查詢,為區(qū)別起見,外層上的表取了別名SCX。查詢結(jié)果為:CNOCS-221EE-122例3-7查詢選修CS-110課程的學(xué)生名。語句:SELECTSNAMEFROMSTUDENT,SCWHERESTUDENT.SNO=SC.SNO
AND
CNO=‘CS-110’;
查詢結(jié)果為:
SNAME歐陽美林周遠(yuǎn)行李維例3-8查詢學(xué)生的平均身高。
查詢結(jié)果為:
AVG(HEIGHT)1.72語句:SELECTAVG(HEIGHT)
FROMSTUDENT;聚合函數(shù)例3-9查詢?nèi)背煽?jī)的學(xué)生名及課程號(hào)。語句:
SELECTSNAME,CNO
FROMSTUDENT,SC
WHERESTUDENT.SNO=SC.SNO
ANDGRADEISNULL;
查詢結(jié)果為:
SNAMECNO王大力CS-221補(bǔ)充:查詢至少選修課程號(hào)為CS-110和CS-201的學(xué)生學(xué)號(hào)。語句:
SELECTX.SNO
FROMSCASX,SCASY
WHEREX.SNO=Y.SNO
ANDX.CNO=‘CS-110’
ANDY.CNO=‘CS-201’;別名同一個(gè)關(guān)系SC在一層中出現(xiàn)兩次,為了區(qū)別,引入別名X,Y,也可看成定義了兩個(gè)元組變量X,Y。在語句中應(yīng)用別名加以限定。保留字AS可省。SNOCNOGRADE9309203CS-11082.59309203CS-201809104421CS-110919309119CS-110729309119CS-201659209120CS-221
查詢結(jié)果如下:3.4.3GROUPBY和ORDERBY子句的應(yīng)用
GROUPBY子句按列值分組。列值相同的分為一組。當(dāng)其后有多個(gè)列名時(shí),則先按第一列名分組,再按第二列名在組中分組,直到GROUP子句指名的列都具有相同值的基本組,HAVING后的條件是選擇基本組的條件。
ORDERBY子句對(duì)查詢結(jié)果按指定列值排序。ASC表示升序,DESC表示降序,缺省時(shí)為升序。當(dāng)有多個(gè)列名時(shí),先按第一列名排序,再按第二列名排序,…。例3-10試列出計(jì)算機(jī)系所開課程的最高成績(jī)、最低成績(jī)和平均成績(jī)。如果某門課程的成績(jī)不全(即GRADE中有NULL出現(xiàn)),則該課程不予統(tǒng)計(jì),結(jié)果按CNO升序排列。語句:SELECTCNO,MAX(GRADE),MIN(GRADE),AVG(GRADE)FROMSCWHERECNOLike‘CS*’/*選擇計(jì)算機(jī)系所開的課程
GROUPBYCNO/*按CNO分組*
HAVINGCNONOTIN(SELECTCNO/*刪去成績(jī)不全的組*
FROMSC
WHEREGRADEISNULL)ORDERBYCNO;/*按CNO升序排序*查詢結(jié)果為:
CNOMAX(GRADE)MIN(GRADE)AVG(GRADE)CS-110917281.8CS-201806572.5注:加了GROUPBY后,SELECT子句中的各值(表達(dá)式)在基本組中應(yīng)是唯一的!3.4.4包含UNION的查詢
SQL還提供了一些集合運(yùn)算,如UNION(并)、INTERSECTION(交)、MINUS(差)。注:參與集合運(yùn)算的兩個(gè)關(guān)系必須具有相等的目,且對(duì)應(yīng)的屬性域相同。例3-11查詢1973年出生的學(xué)生和選修電機(jī)工程系所開課程(EE標(biāo)志)的學(xué)生的學(xué)號(hào)。UNION
SELECTSNO
FROMSC
WHERE
CNO=‘EE*’;語句:SELECTSNO
FROMSTUDENT
WHEREYEAR(BDATE)=1973注:做UNION運(yùn)算時(shí),必須消除結(jié)果的重復(fù)項(xiàng)。思考題:查詢秋季學(xué)期有2門以上課程獲90分以上成績(jī)的學(xué)生名。3.5SQL數(shù)據(jù)操縱語言
SQL提供了增、刪、改數(shù)據(jù)庫(kù)中數(shù)據(jù)的語句,分別介紹如下。3.5.1INSERT語句(增加一個(gè)元組)
格式如圖3-5所示,用來在一個(gè)表中插入一個(gè)元組。例3-12在STUDENT表中插入一個(gè)元組。語句:INSERTINTOSTUDENTVALUES(‘9309204’,‘金月明’,‘女’,
1976-03-04,1.60);注:VALUE后面是要插入的元組值,其次序和域應(yīng)與STUDENT的模式定義一致。例3-13在SC表中插入一元組,成績(jī)暫缺。語句:INSERTINTOSC(SNO,CNO)
VALUES(‘9309204’,‘CS-221’);插入的元組為:(‘9309204’,‘CS-221’,NULL)。原表中定義GRADE允許為NULL。例3-14生成一個(gè)女學(xué)生成績(jī)臨時(shí)表FGRADE,表中包括SNAME,CNO,GRADE三個(gè)屬性。首先定義一個(gè)臨時(shí)表FGRADE:
語句:CREATETABLEFGRADE(SNAMEVARCHAR(8)NOTNULL,CNOCHAR(6)NOTNULL,GRADEDEC(4,1)DEFAULTNULL);其次插入有關(guān)的數(shù)據(jù):
語句:
INSERTINTOFGRADE
SELECTSNAME,CNO,GRADE
FROMSTUDENT,SC
WHERESTUDENT.SNO=SC.SNO插入的內(nèi)容為:SNAMECNOGRADE歐陽美林CS-11082.5歐陽美林CS-20180歐陽美林EE-20175李維CS-11072李維CS-201653.5.2DELETE語句格式如圖3-6所示注:如果沒有WHERE子句,則刪除指定表中的所有元組,使該表為一空表。(刪除整個(gè)表要用DROPTABLE語句)例3-15從SC表中刪除GRADE為NULL的元組。語句:DELETEFROMSC
WHEREGRADEISNULL;3.5.3UPDATE(更新)語句格式如圖3-7所示例3-16將CS-110課程改成春季開出。語句:UPDATECOURSE
SETSEMESTER=‘春’
WHERECNO=‘CS-110’;例3-17將STUDENT表中的HEIGHT的單位改為厘米。語句:UPDATESTUDENT
SETHEIGHT=100*HEIGHT;視圖:是由其它視圖或基表導(dǎo)出的虛表。它不是一個(gè)存在數(shù)據(jù)庫(kù)中的表,而是在數(shù)據(jù)目錄中保留其邏輯定義。當(dāng)視圖參與數(shù)據(jù)庫(kù)操作時(shí),可通過修改查詢條件,把對(duì)視圖的查詢轉(zhuǎn)換為對(duì)基表的查詢。3.6SQL中的視圖3.6.1普通視圖視圖的定義:1、用戶經(jīng)常要用到的一些數(shù)據(jù);2、用戶經(jīng)常要查詢的內(nèi)容;視圖的撤消:視圖不再需要時(shí),可以從系統(tǒng)中撤消。視圖的定義和撤消語句的格式如圖3-8(a)、(b)所示。不能使用UNION、ORDERBY等例3-18試定義視圖ENROL-SPRING,作為學(xué)生春季選課一覽表,其中含有SNO,SNAME,CNO,CREIT等屬性。
語句:CREATEVIEWENROL-SPRINGAS
SELECTSNO,SNAME,CNO,CREDIT
FROMSTUDENT,COURSE,SC
WHERESTUDENT.SNO=SC.SNO
ANDCOURSE.CNO=SC.CNO
ANDSEMESTER=‘春’;例3-19試定義一視圖GRADE-AVG,表示學(xué)生的平均成績(jī),其中包括SNAME和AVGGRADE(平均成績(jī))兩個(gè)屬性。
語句:CREATEVIEWGRADE-AVG(SNAME,AVGGRADE)AS
SELECTSNAME,AVG(GRADE)
FROMSTUDENT,SC
WHERESTUDENT.SNO=SC.SNO
GROUPBYSNAME;可見,視圖實(shí)際上是一個(gè)SELECT語句。撤消上述兩個(gè)視圖:DROPVIEWENROL-SPRING;DROPVIEWGRADE-AVG;注意:視圖對(duì)應(yīng)的內(nèi)容總是實(shí)時(shí)、最新的內(nèi)容,并不是視圖定義時(shí)對(duì)應(yīng)內(nèi)容。這是由于基表隨著更新操作其內(nèi)容在不斷變化,所以視圖對(duì)應(yīng)的內(nèi)容也在不斷變化。視圖的內(nèi)容是靜態(tài)的,還是動(dòng)態(tài)的?
視圖的查詢可像基表一樣參與數(shù)據(jù)庫(kù)操作,但視圖的更新則最終落實(shí)到有關(guān)基表的更新。
通常情況下,由連接定義的視圖是不可更新的。但如果連接定義的視圖所涉及到的幾個(gè)基表的主鍵都在視圖中時(shí),還是可以更新的。(見例3-18)此外,視圖更新還會(huì)存在一些語義上的問題。
CREATEVIEWSPRINGAS
SELECTCNO,LHOUR,CREDIT
FROMCOURSE
WHERESEMESTER=‘春’;例如:由基表COURSE定義一個(gè)春季所開課程的視圖SPRING如下:該視圖的元組雖與基表COURSE的元組存在一一對(duì)應(yīng)關(guān)系,但若在視圖中刪除一個(gè)元組,如:DELETEFROMSPRINGWHERECNO=‘CS-20’;這里存在一個(gè)語義問題:
是CS-20課程從春季開出改為秋季開出?還是CS-20課程要撤消?
若為前者,應(yīng)修改基表的SEMESTER列,而不是刪除‘CNO=CS-20’的元組;
若為后者,才必須刪除‘CNO=CS-20’的元組。l
由一個(gè)基表定義的視圖,只有含有基表的主鍵或候補(bǔ)鍵,并且視圖中沒有用表達(dá)式或函數(shù)定義的屬性,才允許更新。l
由多表連接所定義的視圖不允許更新。l
定義中用到GROUPBY子句或聚集函數(shù)的視圖不允許更新。因此,視圖更新是一個(gè)較復(fù)雜的問題。通常都加以限制:視圖的優(yōu)點(diǎn):
(1)視圖提供了邏輯數(shù)據(jù)獨(dú)立性。
在數(shù)據(jù)的整體結(jié)構(gòu)或存儲(chǔ)結(jié)構(gòu)發(fā)生改變,并且這些改變與用戶無關(guān),那么原有的應(yīng)用程序不必修改;當(dāng)這些改變與用戶有關(guān)時(shí),也只要修改視圖,至于應(yīng)用程序仍可不改動(dòng)或只需做少量改動(dòng)。(2)簡(jiǎn)化了用戶觀點(diǎn)。數(shù)據(jù)庫(kù)的全部結(jié)構(gòu)是復(fù)雜的、并有多種聯(lián)系。一般用戶只要用到數(shù)據(jù)庫(kù)中一部分?jǐn)?shù)據(jù),而視圖機(jī)制正好適應(yīng)了用戶的需要。視圖是一個(gè)SELECT語句定義的,用戶只需關(guān)心視圖的內(nèi)容,而不必關(guān)心構(gòu)成視圖的若干關(guān)系的聯(lián)接、投影操作。(3)數(shù)據(jù)的安全保護(hù)功能。
在數(shù)據(jù)庫(kù)中,有些數(shù)據(jù)是保密的,不能讓用戶隨便使用。此時(shí),可針對(duì)不同的用戶定義不同的視圖,在視圖中只出現(xiàn)用戶需要的數(shù)據(jù)。系統(tǒng)提供視圖讓用戶使用,而不是關(guān)系。這樣,就達(dá)到數(shù)據(jù)的安全保護(hù)功能。3.6.2臨時(shí)視圖和遞歸查詢?cè)趶?fù)雜查詢中,將查詢中相對(duì)獨(dú)立部分作為查詢的中間結(jié)果,定義臨時(shí)視圖。
功能相同,但臨時(shí)視圖僅用于附在臨時(shí)定義后的查詢語句中;查詢語句結(jié)束,臨時(shí)視圖便不在存在,不需用DROPVIEW去撤消。創(chuàng)建臨時(shí)視圖只需將CREATEVIEW改為WITH。臨時(shí)視圖與普通視圖的區(qū)別:遞歸查詢的應(yīng)用很多,例如查詢某門課程的先修課程等。傳統(tǒng)的SQL難以表
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年股權(quán)轉(zhuǎn)讓協(xié)議:合伙人退伙條款3篇
- 2024年股權(quán)變動(dòng)保證金合同
- 2024年高效貨運(yùn)汽車租賃合同
- 2024年版:煤炭購(gòu)銷代理合同模板
- 2024手繪漫畫作品出版授權(quán)合同書3篇
- 2024年甲乙雙方關(guān)于石材加工廠安全防護(hù)與火災(zāi)防治的合同
- 2024年版離婚后共住生活權(quán)益合同版B版
- 2024中介公司房屋買賣合同書-共管賬戶安全協(xié)議3篇
- 2025年度物流倉(cāng)儲(chǔ)安全生產(chǎn)責(zé)任制合同3篇
- 2024年環(huán)境污染第三方治理合同
- 2022心理學(xué)課題論文開題報(bào)告范文
- 自行招用保安員單位備案申請(qǐng)材料
- 一般抹灰分項(xiàng)工程檢驗(yàn)批質(zhì)量驗(yàn)收記錄
- DB32∕T 3377-2018 城市公共建筑人防工程規(guī)劃設(shè)計(jì)規(guī)范
- 中建三局住宅工程精益建造實(shí)施指南
- 分布式光伏發(fā)電項(xiàng)目并網(wǎng)驗(yàn)收意見單
- 網(wǎng)站隱私政策模板
- YY∕T 1831-2021 梅毒螺旋體抗體檢測(cè)試劑盒(免疫層析法)
- 消弧產(chǎn)品規(guī)格實(shí)用標(biāo)準(zhǔn)化規(guī)定
- 裝飾裝修工程施工合理化建議和降低成本措施提要:完整
- 第十四章35kV變電站保護(hù)整定值計(jì)算實(shí)例
評(píng)論
0/150
提交評(píng)論