版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第4章 數(shù)據(jù)庫(kù)的查詢和視圖 4.1連接、選擇和投影 Oracle是一個(gè)關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),關(guān)系數(shù)據(jù)庫(kù)建立在關(guān)系模型基礎(chǔ)之上,具有嚴(yán)格的數(shù)學(xué)理論基礎(chǔ)。關(guān)系數(shù)據(jù)庫(kù)對(duì)數(shù)據(jù)的操作除了包括集合代數(shù)的并、差等運(yùn)算之外,還定義了一組專門的關(guān)系運(yùn)算:連接、選擇和投影,關(guān)系運(yùn)算的特點(diǎn)是運(yùn)算的對(duì)象和結(jié)果都是表。 4.1.1選擇 選擇(Selection),簡(jiǎn)單的說(shuō)就是通過(guò)一定的條件把自己所需要的數(shù)據(jù)檢索出來(lái)。選擇是單目運(yùn)算,其運(yùn)算對(duì)象是一個(gè)表。該運(yùn)算按給定的條件,從表中選出滿足條件的行形成一個(gè)新表,作為運(yùn)算結(jié)果。4.1.1選擇 【例4.1】學(xué)生情況表如表4.1所示。 若要在學(xué)生情況表中找出學(xué)生表中性別為女且平均成
2、績(jī)?cè)?0分以上的行形成一個(gè)新表, 該選擇運(yùn)算的結(jié)果如表4.2所示。表4.1 學(xué)生表 表4.2 查詢后的結(jié)果4.1.2投影 投影(Projection)也是單目運(yùn)算。投影就是選擇表中指定的列,這樣在查詢結(jié)果中只顯示指定數(shù)據(jù)列,減少了顯示的數(shù)據(jù)量也提高查詢的性能。 【例4.2】若在表4.1中對(duì)“姓名”和“平均成績(jī)”投影,該查詢得到如表4.3所示的新表。表4.3 投影后的新表4.1.3連接連接(JOIN)是把兩個(gè)表中的行按照給定的條件進(jìn)行拼接而形成新表?!纠?.3】若表A和B分別如表4.4和表4.5所示,則連接后結(jié)果如表4.6所示。表4.4 A表表4.5 B表表4.6 連接后的表4.1.3連接 【例
3、4.4】若表A和表B分別如表4.7和表4.8所示,自然連接后的新表C如表4.9所示。 表4.7 A表 表4.8 B表 表4.9 C表 4.2 數(shù)據(jù)庫(kù)的查詢 使用數(shù)據(jù)庫(kù)和表的主要目的是存儲(chǔ)數(shù)據(jù)以便在需要時(shí)進(jìn)行檢索、統(tǒng)計(jì)或組織輸出,通過(guò)PL/SQL的查詢可以從表或視圖中迅速方便地檢索數(shù)據(jù)。PL/SQL的SELECT語(yǔ)句可以實(shí)現(xiàn)對(duì)表的選擇、投影及連接操作,其功能十分強(qiáng)大。 下面介紹SELECT語(yǔ)句,它是PL/SQL的核心。SELECT語(yǔ)句很復(fù)雜,主要的子句如下: 語(yǔ)法格式: SELECT select_list /*指定要選擇的列或行及其限定*/ FROM table_source /*FROM子句
4、,指定表或視圖*/ WHERE search_condition /*WHERE子句,指定查詢條件*/ GROUP BY group_by_expression /*GROUP BY子句,指定分組表達(dá)式*/ HAVING search_condition /*HAVING子句,指定分組統(tǒng)計(jì)條件*/ ORDER BY order_expression ASC | DESC /*ORDER子句,指定排序表達(dá)式和順序*/4.2.1選擇列選擇表中的列組成結(jié)果表,通過(guò)SELECT語(yǔ)句的SELECT子句來(lái)表示。語(yǔ)法格式: SELECT ALL | DISTINCT 其中select_list指出了結(jié)果的形
5、式,select_list的主要格式為: * /*選擇當(dāng)前表或視圖的所有列*/ | table_name | view_name | table_alias . * /*選擇指定的表或視圖的所有列*/ | colume_name | expression AS column_alias /*選擇指定的列*/ | column_alias = expression /*選擇指定列并更改列標(biāo)題*/ , n 1.選擇一個(gè)表中指定的列使用SELECT語(yǔ)句選擇一個(gè)表中的某些列,各列名之間要以逗號(hào)分隔。語(yǔ)法格式: SELECT column_name , column_name FROM table_na
6、me WHERE search_condition其功能是在FROM子句指定的表中檢索符合search_condition條件的列。 4.2.1選擇列【例4.5】查詢XSCJ數(shù)據(jù)庫(kù)的XS表中各個(gè)同學(xué)的XM、XH和ZXF。 SELECT XH, XM,ZXF FROM XS;執(zhí)行結(jié)果如圖4.1所示。圖4.1 在XS表中選擇列 4.2.1選擇列【例4.6】查詢XS表中ZXF大于45同學(xué)的XH、XM和ZXF。 SELECT XH,XM,ZXF FROM XS WHERE ZXF45;當(dāng)在SELECT語(yǔ)句指定列的位置上使用*號(hào)時(shí),表示選擇表的所有列?!纠?.7】查詢XS表中的所有列。 SELECT *
7、 FROM XS;該語(yǔ)句等價(jià)于語(yǔ)句: SELECT XH,XM,ZYM,XB,CSSJ,ZXF,BZ FROM XS;其執(zhí)行后將列出XS表中的所有數(shù)據(jù)。4.2.1選擇列2.修改查詢結(jié)果中的列標(biāo)題當(dāng)希望查詢結(jié)果中的某些列或所有列顯示時(shí)使用自己選擇的列標(biāo)題時(shí),可以在列名之后使用AS子句來(lái)更改查詢結(jié)果的列標(biāo)題名,其中column_alias是指定的列標(biāo)題。【例4.8】查詢XS表中計(jì)算機(jī)同學(xué)的XH、XM和ZXF,結(jié)果中各列的標(biāo)題分別指定為學(xué)號(hào)、姓名和總學(xué)分。SELECT XH AS 學(xué)號(hào),XM AS 姓名,ZXF AS 總學(xué)分FROM XSWHERE ZYM=計(jì)算機(jī);該語(yǔ)句的執(zhí)行結(jié)果如圖4.2所示。更
8、改查詢結(jié)果中的列標(biāo)題可以省略AS關(guān)鍵字。例如:SELECT XH 學(xué)號(hào), XM 姓名, ZXF 總學(xué)分FROM XSWHERE ZYM=計(jì)算機(jī);4.2.1選擇列圖4.2更改查詢結(jié)果中的列標(biāo)題 4.2.1選擇列3. 計(jì)算列值使用SELECT對(duì)列進(jìn)行查詢時(shí),在結(jié)果中可以輸出對(duì)列值計(jì)算后的值,即SELECT子句可使用表達(dá)式作為結(jié)果,格式為:SELECT expression , expression 【例4.9】創(chuàng)建產(chǎn)品銷售數(shù)據(jù)庫(kù)XSH,并在其中創(chuàng)建產(chǎn)品表CP,其表結(jié)構(gòu)如表4.10所 表4.10 CP表結(jié)構(gòu) 4.2.1選擇列設(shè)CP表中已有如表4.11所示的數(shù)據(jù)。 表4.11 CP表 4.2.1選擇列
9、下列語(yǔ)句將列出產(chǎn)品名稱和產(chǎn)品總值:SELECT CPMC AS 產(chǎn)品名稱,JG * KCL AS產(chǎn)品總值FROM CP;該語(yǔ)句的執(zhí)行結(jié)果如圖4.3所示。圖4.3 計(jì)算列值4.2.1選擇列4.消除結(jié)果集中的重復(fù)行【例4.10】對(duì)XSCJ數(shù)據(jù)庫(kù)的XS表只選擇ZYM和ZXF,消除結(jié)果集中的重復(fù)行。SELECT DISTINCT ZYM AS 專業(yè)名,ZXF AS 總學(xué)分FROM XS;該語(yǔ)句執(zhí)行的結(jié)果為:專業(yè)名 總學(xué)分計(jì)算機(jī) 48計(jì)算機(jī) 50計(jì)算機(jī) 52計(jì)算機(jī) 54通信工程 40通信工程 42通信工程 44通信工程 50與DISTINCT相反,當(dāng)使用關(guān)鍵字ALL時(shí),將保留結(jié)果集的所有行。4.2.1選
10、擇列【例4.11】以下的SELECT語(yǔ)句對(duì)XSCJ數(shù)據(jù)庫(kù)的XS表選擇ZYM和ZXF,不消除結(jié)果集中的重復(fù)行。SELECT ALL ZYM AS 專業(yè)名,ZXF AS 總學(xué)分FROM XS;該語(yǔ)句執(zhí)行后結(jié)果為:專業(yè)名 總學(xué)分計(jì)算機(jī) 50計(jì)算機(jī) 50計(jì)算機(jī) 50計(jì)算機(jī) 50計(jì)算機(jī) 54計(jì)算機(jī) 52計(jì)算機(jī) 50計(jì)算機(jī) 50計(jì)算機(jī) 50計(jì)算機(jī) 48計(jì)算機(jī) 50通信工程 42通信工程 40通信工程 42通信工程 42通信工程 44通信工程 42通信工程 42通信工程 42通信工程 42通信工程 42通信工程 504.2.2選擇行1.表達(dá)式比較比較運(yùn)算符用于比較兩個(gè)表達(dá)式值,共有7個(gè),分別是: =(等于)
11、、(小于)、(大于)、=(大于等于)、(不等于)、!=(不等于)。比較運(yùn)算的格式為:expression = | | | = | | != expression當(dāng)兩個(gè)表達(dá)式值均不為空值(NULL)時(shí),比較運(yùn)算返回邏輯值TRUE(真)或FALSE(假);而當(dāng)兩個(gè)表達(dá)式值中有一個(gè)為空值或都為空值時(shí),比較運(yùn)算將返回UNKNOWN?!纠?.12】(1) 查詢XSH數(shù)據(jù)庫(kù)CP表中庫(kù)存量在500以上的產(chǎn)品情況。SELECT * FROM CP WHERE KCL 500;(2) 查詢XSCJ數(shù)據(jù)庫(kù)XS表中通信工程專業(yè)總學(xué)分大于等于42的同學(xué)的情況。SELECT * FROM XS WHERE ZYM= 通
12、信工程 and ZXF=42;4.2.2選擇行2.模式匹配LIKE謂詞用于指出一個(gè)字符串是否與指定的字符串相匹配,其運(yùn)算對(duì)象可以是char、varchar2和date類型的數(shù)據(jù),返回邏輯值TRUE或FALSE。LIKE謂詞表達(dá)式的格式為:string_expression NOT LIKE string_expression【例4.13】查詢XSH數(shù)據(jù)庫(kù)CP表中產(chǎn)品名含有“冰箱”的產(chǎn)品情況。SELECT * FROM CP WHERE CPMC LIKE %冰箱%;執(zhí)行結(jié)果為:CPBH CPMC JG KCL10001100 冰箱A_100 1500.050010002120冰箱A_200 1
13、850.020010001200冰箱B_200 1600.0120010001102 冰箱C_210 1890.0 6004.2.2選擇行【例4.14】查詢XSCJ數(shù)據(jù)庫(kù)XS表中姓“王”且單名的學(xué)生情況。SELECT * FROM XS WHERE XM LIKE 王_;執(zhí)行結(jié)果為:XH XM ZYM XB CSSJ ZXFBZ061101王林 計(jì)算機(jī) 男10-二月-8650061103王燕 計(jì)算機(jī) 女06-十月-8550061201王敏 通信工程 男10-六月-8442061202王林 通信工程 男29-一月-8540有一門課不及格,待補(bǔ)考3.范圍比較用于范圍比較的關(guān)鍵字有兩個(gè):BETWEE
14、N和IN。當(dāng)要查詢的條件是某個(gè)值的范圍時(shí),可以使用BETWEEN關(guān)鍵字。BETWEEN關(guān)鍵字指出查詢范圍,格式為:expression NOT BETWEEN expression1 AND expression2當(dāng)不使用NOT時(shí),若表達(dá)式expression的值在表達(dá)式expression1與expression2之間(包括這兩個(gè)值),則返回TRUE,否則返回FALSE;使用NOT時(shí),返回值剛好相反。注意:expression1的值不能大于expression2的值。 4.2.2選擇行【例4.15】(1) 查詢XSH數(shù)據(jù)庫(kù)CP表中價(jià)格在2000元與4000元之間的產(chǎn)品情況。 SELECT *
15、 FROM CP WHERE JG BETWEEN 2000 AND 4000;(2) 查詢XSCJ數(shù)據(jù)庫(kù)XS表中不在1985年出生的學(xué)生情況。 SELECT * FROM XS WHERE CSSJ NOT BETWEEN TO_DATE(19850101,YYYYMMDD) and TO_DATE(19851231,YYYYMMDD);使用IN關(guān)鍵字可以指定一個(gè)值表,值表中列出所有可能的值,當(dāng)表達(dá)式與值表中的任一個(gè)匹配時(shí),即返回TRUE,否則返回FALSE。使用IN關(guān)鍵字指定值表的格式為:expression IN ( expression ,n)【例4.16】查詢XSH數(shù)據(jù)庫(kù)CP表中庫(kù)存
16、量為“200”、“300”和“500”的情況。 SELECT * FROM CP WHERE KCL IN (200,300,500);該語(yǔ)句與下列語(yǔ)句等價(jià): SELECT * FROM CP WHERE KCL=200 OR KCL=300 OR KCL=500;4.2.2選擇行4.空值比較當(dāng)需要判定一個(gè)表達(dá)式的值是否為空值時(shí),使用IS NULL關(guān)鍵字,格式為:expression IS NOT NULL當(dāng)不使用NOT時(shí),若表達(dá)式expression的值為空值,返回TRUE,否則返回FALSE;當(dāng)使用NOT時(shí),結(jié)果剛好相反?!纠?.17】查詢XSCJ數(shù)據(jù)庫(kù)中總學(xué)分尚不定的學(xué)生情況。 SELE
17、CT * FROM XS WHERE ZXF IS NULL;4.2.2選擇行5.子查詢?cè)诓樵儣l件中,可以使用另一個(gè)查詢的結(jié)果作為條件的一部分,例如判定列值是否與某個(gè)查詢的結(jié)果集中的值相等,作為查詢條件一部分的查詢稱為子查詢。PL/SQL允許SELECT多層嵌套使用,用來(lái)表示復(fù)雜的查詢。子查詢除了可以用在SELECT語(yǔ)句中,還可以用在INSERT、UPDATE及DELETE語(yǔ)句中。子查詢通常與IN、EXIST謂詞及比較運(yùn)算符結(jié)合使用。(1)IN子查詢IN子查詢用于進(jìn)行一個(gè)給定值是否在子查詢結(jié)果集中的判斷,格式為:expression NOT IN ( subquery )其中subquery是
18、子查詢。當(dāng)表達(dá)式expression與子查詢subquery的結(jié)果表中的某個(gè)值相等時(shí),IN謂詞返回TRUE,否則返回FALSE;若使用了NOT,則返回的值剛好相反。 4.2.2選擇行【例4.18】在XSCJ數(shù)據(jù)庫(kù)中有描述課程情況的表KC和描述學(xué)生成績(jī)表的表XS_KC(表的結(jié)構(gòu)和樣本數(shù)據(jù)見(jiàn)附錄A)。查找選修了課程號(hào)為101的課程的學(xué)生的情況: SELECT * FROM XSWHERE XH IN ( SELECT XH FROM XS_KC WHERE KCH = 101 );在執(zhí)行包含子查詢的SELECT語(yǔ)句時(shí),系統(tǒng)先執(zhí)行子查詢,產(chǎn)生一個(gè)結(jié)果表,再執(zhí)行查詢。本例中,先執(zhí)行子查詢: SELEC
19、T XH FROM XS_KC WHERE KCH = 101;得到一個(gè)只含有學(xué)號(hào)列的表,XS_KC中課程名列值為101的行在結(jié)果表中都有一行。再執(zhí)行外查詢,若XS表中某行的學(xué)號(hào)列值等于子查詢結(jié)果表中的任一個(gè)值,則該行就被選擇。4.2.2選擇行【例4.19】查找未選修離散數(shù)學(xué)的學(xué)生的情況。 SELECT XH,XM,ZYM,ZXF FROM XS WHERE XH NOT IN ( SELECT XH FROM XS_KC WHERE KCH IN ( SELECT KCH FROM KC WHERE KCM = 離散數(shù)學(xué) ) ); 執(zhí)行結(jié)果為:XH XM ZYM ZXF061201 王敏 通
20、信工程 42061202 王林 通信工程 40061203 王玉民 通信工程 42061204 馬琳琳 通信工程 42061206 李計(jì) 通信工程 42061210 李紅慶 通信工程 44061216 孫祥欣 通信工程 42061218 孫研 通信工程 42061220 吳薇華 通信工程 42061221 劉燕敏 通信工程 42061241 羅林琳 通信工程 504.2.2選擇行2)比較子查詢這種子查詢可以認(rèn)為是IN子查詢的擴(kuò)展,它使表達(dá)式的值與子查詢的結(jié)果進(jìn)行比較運(yùn)算,格式為: expression | | = | != | ALL | SOME | ANY ( subquery )其中ex
21、pression為要進(jìn)行比較的表達(dá)式,subquery是子查詢。ALL、SOME和ANY說(shuō)明對(duì)比較運(yùn)算的限制。ALL指定表達(dá)式要與子查詢結(jié)果集中的每個(gè)值都進(jìn)行比較,當(dāng)表達(dá)式與每個(gè)值都滿足比較的關(guān)系時(shí),才返回TRUE,否則返回FALSE;SOME或ANY表示表達(dá)式只要與子查詢結(jié)果集中的某個(gè)值滿足比較的關(guān)系時(shí),就返回TRUE,否則返回FALSE。4.2.2選擇行【例4.20】查找比所有計(jì)算機(jī)系學(xué)生年齡都大的學(xué)生。 SELECT * FROM XSWHERE CSSJ = ANY ( SELECT CJ FROM XS_KC WHERE KCH = 101);(3)EXISTS子查詢EXISTS謂詞
22、用于測(cè)試子查詢的結(jié)果是否為空表,若子查詢的結(jié)果集不為空,則EXISTS返回TRUE,否則返回FALSE。EXISTS還可與NOT結(jié)合使用,即NOT EXISTS,其返回值與EXIST剛好相反。格式為: NOT EXISTS ( subquery )4.2.2選擇行【例4.22】查找選修206號(hào)課程的學(xué)生姓名。 SELECT XM FROM XS WHERE EXISTS ( SELECT * FROM XS_KC WHERE XH=XS.XH AND KCH=206 );本例在子查詢的條件中使用了限定形式的列名引用XS.XH,表示這里的學(xué)號(hào)列出自表XS。 4.2.2選擇行【例4.23】查找選修
23、了全部課程的同學(xué)的姓名。 SELECT XM FROM XS WHERE NOT EXISTS ( SELECT * FROM KC WHERE NOT EXISTS ( SELECT * FROM XS_KC WHERE XH=XS.XH AND KCH=KC.KCH ) );本例即查找沒(méi)有一門功課不選修的學(xué)生。4.2.3查詢對(duì)象前面介紹了SELECT的選擇列和行,這里介紹SELECT查詢的對(duì)象(即數(shù)據(jù)源)的構(gòu)成形式?!纠?.24】查找001102號(hào)同學(xué)所選修的全部課程的同學(xué)的學(xué)號(hào)。本例即要查找這樣的學(xué)號(hào)y,對(duì)所有的課程號(hào)x,若001102號(hào)同學(xué)選修了該課,那么y也選修了該課。 SELECT
24、 DISTINCT XH FROM XS_KC CJ1 WHERE NOT EXISTS ( SELECT * FROM XS_KC CJ2 WHERE CJ2.XH = 001102 AND NOT EXISTS ( SELECT * FROM XS_KC CJ3 WHERE CJ3.XH= CJ1.XH AND CJ3.KCH = CJ2. KCH ) );本例子指定SELECT語(yǔ)句查詢的對(duì)象是表。4.2.3查詢對(duì)象【例4.25】在XS表中查找1986年1月1日以前出生的學(xué)生的姓名和專業(yè)名。 SELECT XM,ZYM FROM (SELECT * FROM XS WHERE CSSJ=
25、80;執(zhí)行結(jié)果為: 姓名 成績(jī) 王燕 81 李方方 80 林一帆 87 張蔚 89有時(shí)用戶所需要的字段來(lái)自兩個(gè)以上的表,那么就要對(duì)兩個(gè)以上的表進(jìn)行連接,稱之為多表連接。4.2.4連接【例4.29】查找選修了“計(jì)算機(jī)基礎(chǔ)”課程且成績(jī)?cè)?0分以上的學(xué)生學(xué)號(hào)、姓名、課程名及成績(jī)。 SELECT XS.XH, XM, KCM, CJ FROM XS , KC , XS_KC WHERE XS.XH = XS_KC.XH AND KC.KCH = XS_KC. KCH AND KCM = 計(jì)算機(jī)基礎(chǔ) AND CJ = 80;執(zhí)行結(jié)果為:XH XM KCM CJ001101王林 計(jì)算機(jī)基礎(chǔ) 8000110
26、4韋嚴(yán)平 計(jì)算機(jī)基礎(chǔ) 90001108林一帆 計(jì)算機(jī)基礎(chǔ) 85001110張蔚 計(jì)算機(jī)基礎(chǔ) 95001111趙琳 計(jì)算機(jī)基礎(chǔ) 91001201王敏 計(jì)算機(jī)基礎(chǔ) 80001203王玉民 計(jì)算機(jī)基礎(chǔ) 87001204馬琳琳 計(jì)算機(jī)基礎(chǔ) 91001216孫祥欣 計(jì)算機(jī)基礎(chǔ) 81001220吳薇華 計(jì)算機(jī)基礎(chǔ) 82001241羅林琳 計(jì)算機(jī)基礎(chǔ) 904.2.4連接2.以JOIN關(guān)鍵字指定的連接PL/SQL擴(kuò)展了以JOIN關(guān)鍵字指定連接的表示方式,使表的連接運(yùn)算能力有了增強(qiáng)。連接表的格式為: ON | CROSS JOIN | 其中table_source為需連接的表,join_type表示連接類型,O
27、N用于指定連接條件。join_type的格式為: INNER | LEFT | RIGHT | FULL OUTER JOIN其中INNER表示內(nèi)連接,OUTER表示外連接,join_hint是連接提示。CROSS JOIN表示交叉連接。因此,以JOIN關(guān)鍵字指定的連接有三種類型。4.2.4連接2.以JOIN關(guān)鍵字指定的連接(1) 內(nèi)連接內(nèi)連接按照ON所指定的連接條件合并兩個(gè)表,返回滿足條件的行?!纠?.30】查找XSCJ數(shù)據(jù)庫(kù)每個(gè)學(xué)生的情況以及選修的課程情況。 SELECT * FROM XS INNER JOIN XS_KC ON XS.XH = XS_KC.XH; 結(jié)果表將包含XS表和X
28、S_KC表的所有字段(不去除重復(fù)字段學(xué)號(hào))。若要去除重復(fù)的學(xué)號(hào)字段,可將SELECT子句改為: SELECT XS.* , KCH , CJ【例4.31】用FROM的JOIN關(guān)鍵字表達(dá)下列查詢:查找選修了206課程且成績(jī)?cè)?0分以上的學(xué)生姓名及成績(jī)。 SELECT XM , CJ FROM XS JOIN XS_KC ON XS.XH = XS_KC.XH WHERE KCH = 206 AND CJ=80;內(nèi)連接還可以用于多個(gè)表的連接。 4.2.4連接【例4.32】用FROM的JOIN關(guān)鍵字表達(dá)下列查詢:查找選修了“計(jì)算機(jī)基礎(chǔ)”課程且成績(jī)?cè)?0分以上的學(xué)生學(xué)號(hào)、姓名、課程名及成績(jī)。 SELE
29、CT XS.XH , XM , KCM , CJ FROM XS JOIN XS_KC JOIN KC ON XS_KC.KCH = KC.KCH ON XS.XH = XS_KC.XH WHERE KCM = 計(jì)算機(jī)基礎(chǔ) AND CJ=80;作為一種特例,可以將一個(gè)表與它自身進(jìn)行連接,稱為自連接。若要在一個(gè)表中查找具有相同列值的行,則可以使用自連接。使用自連接時(shí)需為表指定兩個(gè)別名,且對(duì)所有列的引用均要用別名限定?!纠?.33】查找不同課程成績(jī)相同的學(xué)生的學(xué)號(hào)、課程號(hào)和成績(jī)。 SELECT a.XH,a.KCH,b.KCH,a.CJ FROM XS_KC a JOIN XS_KC b ON a
30、.CJ=b.CJ AND a.XH=b.XH AND a.KCH!=b.KCH;執(zhí)行結(jié)果為: XH KCH KCH CJ001102102 206 78001102206 102 784.2.4連接2.以JOIN關(guān)鍵字指定的連接(2) 外連接外連接的結(jié)果表不但包含滿足連接條件的行,還包括相應(yīng)表中的所有行。外連接包括三種:左外連接(LEFT OUTER JOIN):結(jié)果表中除了包括滿足連接條件的行外,還包括左表的所有行;右外連接(RIGHT OUTER JOIN):結(jié)果表中除了包括滿足連接條件的行外,還包括右表的所有行;完全外連接(FULL OUTER JOIN):結(jié)果表中除了包括滿足連接條件的
31、行外,還包括兩個(gè)表的所有行。其中的OUTER關(guān)鍵字均可省略。4.2.4連接【例4.34】查找所有學(xué)生情況及他們選修的課程號(hào),若學(xué)生未選修任何課,也要包括其情況。 SELECT XS.* , KCH FROM XS LEFT OUTER JOIN XS_KC ON XS.XH = XS_KC.XH;本例執(zhí)行時(shí),若有學(xué)生未選任何課程,則結(jié)果表中相應(yīng)行的課程號(hào)字段值為NULL?!纠?.35】查找被選修了的課程的選修情況和所有開(kāi)設(shè)的課程名。 SELECT XS_KC.* , KCM FROM XS_KC RIGHT JOIN KC ON XS_KC.KCH= KC.KCH;本例執(zhí)行時(shí),若某課程未被選修
32、,則結(jié)果表中相應(yīng)行的學(xué)號(hào)、課程號(hào)和成績(jī)字段值均為NULL。注意:外連接只能對(duì)兩個(gè)表進(jìn)行。 4.2.4連接2.以JOIN關(guān)鍵字指定的連接(3) 交叉連接交叉連接實(shí)際上是將兩個(gè)表進(jìn)行笛卡爾積運(yùn)算,結(jié)果表是由第一個(gè)表的每行與第二個(gè)表的每一行拼接后形成的表,因此結(jié)果表的行數(shù)等于兩個(gè)表行數(shù)之積。【例4.36】列出學(xué)生所有可能的選課情況。 SELECT XH, XM, KCH, KCM FROM XS CROSS JOIN KC;注意: 交叉連接不能有條件,且不能帶WHERE子句。4.2.5匯總1.統(tǒng)計(jì)函數(shù)統(tǒng)計(jì)函數(shù)用于計(jì)算表中的數(shù)據(jù),返回單個(gè)計(jì)算結(jié)果。下面對(duì)常用的幾個(gè)統(tǒng)計(jì)函數(shù)加以介紹。(1)SUM和AVG
33、函數(shù)。SUM和AVG函數(shù)分別用于求表達(dá)式中所有值項(xiàng)的總和與平均值,語(yǔ)法格式為: SUM / AVG ( ALL | DISTINCT expression )其中expression是常量、列、函數(shù)或表達(dá)式。SUM和AVG函數(shù)只能對(duì)數(shù)值型數(shù)據(jù)進(jìn)行計(jì)算。ALL表示對(duì)所有值進(jìn)行運(yùn)算,DISTINCT表示去除重復(fù)值,缺省為ALL。SUM / AVG忽略NULL值。 【例4.37】求選修101課程的學(xué)生的平均成績(jī)。 SELECT AVG(CJ) AS 課程101平均成績(jī) FROM XS_KC WHERE KCH=101;執(zhí)行結(jié)果為:課程101平均成績(jī)784.2.5匯總1. 統(tǒng)計(jì)函數(shù)(2)MAX和MIN
34、函數(shù)。MAX和MIN函數(shù)分別用于求表達(dá)式中所有值項(xiàng)的最大值與最小值,語(yǔ)法格式為:MAX / MIN ( ALL | DISTINCT expression )其中expression是常量、列、函數(shù)或表達(dá)式,其數(shù)據(jù)類型可以是數(shù)字、字符和時(shí)間日期類型。ALL表示對(duì)所有值進(jìn)行運(yùn)算,DISTINCT表示去除重復(fù)值,缺省為ALL。MAX/MIN忽略NULL值?!纠?.38】求選修101課程的學(xué)生的最高分和最低分。 SELECT MAX(CJ) AS 課程101的最高分, MIN(CJ) AS 課程101的最低分 FROM XS_KC WHERE KCH=101;執(zhí)行結(jié)果為:課程101的最高分 課程10
35、1的最低分 95 624.2.5匯總1. 統(tǒng)計(jì)函數(shù)(3)COUNT函數(shù)。COUNT函數(shù)用于統(tǒng)計(jì)組中滿足條件的行數(shù)或總行數(shù),格式為: COUNT ( ALL | DISTINCT expression | * )其中expression是一個(gè)表達(dá)式。ALL表示對(duì)所有值進(jìn)行運(yùn)算,DISTINCT表示去除重復(fù)值,缺省為ALL。選擇*時(shí)將統(tǒng)計(jì)總行數(shù)。COUNT忽略NULL值?!纠?.39】(1) 求學(xué)生的總?cè)藬?shù)。 SELECT COUNT(*) AS 學(xué)生總數(shù) FROM XS;COUNT(*) 不需要任何參數(shù)。(2) 求選修了課程的學(xué)生總?cè)藬?shù)。 SELECT COUNT(DISTINCT XH) FR
36、OM XS_KC;(3) 統(tǒng)計(jì)離散數(shù)學(xué)課程成績(jī)?cè)?5分以上的人數(shù)。 SELECT COUNT(CJ) AS 離散數(shù)學(xué)85分以上的人數(shù) FROM XS_KC WHERE CJ=85 AND KCH= ( SELECT KCH FROM KC WHERE KCM= 離散數(shù)學(xué) );執(zhí)行結(jié)果為:離散數(shù)學(xué)85分以上的人數(shù) 24.2.5匯總2.GROUP BY子句GROUP BY子句用于對(duì)表或視圖中的數(shù)據(jù)按字段分組,格式為: GROUP BY ALL group_by_expression ,ngroup_by_expression:用于分組的表達(dá)式,其中通常包含字段名。指定ALL將顯示所有組。使用GRO
37、UP BY子句后,SELECT子句中的列表中只能包含在GROUP BY中指出的列或在統(tǒng)計(jì)函數(shù)中指定的列?!纠?.40】將XSCJ數(shù)據(jù)庫(kù)中各專業(yè)名輸出。 SELECT ZYM AS 專業(yè)名 FROM XS GROUP BY ZYM;執(zhí)行結(jié)果為:專業(yè)名計(jì)算機(jī) 通信工程 4.2.5匯總【例4.41】求XSCJ數(shù)據(jù)庫(kù)中各專業(yè)的學(xué)生數(shù)。 SELECT ZYM AS 專業(yè)名,COUNT(*) AS 學(xué)生數(shù) FROM XS GROUP BY ZYM;執(zhí)行結(jié)果為:專業(yè)名 學(xué)生數(shù)計(jì)算機(jī) 11通信工程 11【例4.42】求被選修的各門課程的平均成績(jī)和選修該課程的人數(shù)。 SELECT KCH AS課程號(hào), AVG(
38、CJ) AS 平均成績(jī),COUNT(XH) AS 選修人數(shù) FROM XS_KC GROUP BY KCH;執(zhí)行結(jié)果為:課程號(hào) 平均成績(jī) 選修人數(shù)101 7820102 7711206 75114.2.5匯總3.HAVING子句使用GROUP BY子句和統(tǒng)計(jì)函數(shù)對(duì)數(shù)據(jù)進(jìn)行分組后,還可以使用HAVING子句對(duì)分組數(shù)據(jù)進(jìn)行進(jìn)一步的篩選。例如查找XSCJ數(shù)據(jù)庫(kù)中平均成績(jī)?cè)?5分以上的學(xué)生,就是在XS_KC數(shù)據(jù)庫(kù)上按學(xué)號(hào)分組后篩選出符合平均成績(jī)大于等于85的學(xué)生。HAVING子句的格式為: HAVING 其中search_condition為查詢條件,與WHERE子句的查詢條件類似,并且可以使用統(tǒng)計(jì)函
39、數(shù)?!纠?.43】查找XSCJ數(shù)據(jù)庫(kù)中平均成績(jī)?cè)?5分以上的學(xué)生的學(xué)號(hào)和平均成績(jī)。 SELECT XH AS 學(xué)號(hào), AVG(CJ) AS 平均成績(jī) FROM XS_KC GROUP BY XH HAVING AVG(CJ)=85;執(zhí)行結(jié)果為:學(xué)號(hào) 平均成績(jī)001110 91001203 87001204 91001241 904.2.5匯總【例4.44】查找選修課程超過(guò)2門且成績(jī)都在80分以上的學(xué)生的學(xué)號(hào)。 SELECT XH AS學(xué)號(hào) FROM XS_KC WHERE CJ=80 GROUP BY XH HAVING COUNT(*) 2;查詢將XS_KC表中成績(jī)大于或等于80的記錄按學(xué)號(hào)
40、分組,對(duì)每組記錄計(jì)數(shù),選出記錄數(shù)大于2的各組的學(xué)號(hào)值形成結(jié)果表?!纠?.45】查找通信工程專業(yè)平均成績(jī)?cè)?5分以上的學(xué)生的學(xué)號(hào)和平均成績(jī)。 SELECT XH AS學(xué)號(hào),AVG(CJ) AS 平均成績(jī) FROM XS_KC WHERE XH IN ( SELECT XH FROM XS WHERE ZYM= 通信工程 ) GROUP BY XH HAVING AVG(CJ) =85;4.2.6排序在應(yīng)用中經(jīng)常要對(duì)查詢的結(jié)果排序輸出,例如學(xué)生成績(jī)由高到低排序。在SELECT語(yǔ)句中,使用ORDER BY子句對(duì)查詢結(jié)果進(jìn)行排序。ORDER BY子句的格式為: ORDER BY order_by_ex
41、pression ASC | DESC ,n 其中order_by_expression是排序表達(dá)式,可以是列名、表達(dá)式或一個(gè)正整數(shù),當(dāng)expression是一個(gè)正整數(shù)時(shí),表示按表中的該位置上列排序。關(guān)鍵字ASC表示升序排列,DESC表示降序排列,系統(tǒng)默認(rèn)值為ASC。【例4.46】將通信工程專業(yè)的學(xué)生按出生時(shí)間先后排序。 SELECT * FROM XS WHERE ZYM= 通信工程 ORDER BY CSSJ;4.2.6排序【例4.47】將計(jì)算機(jī)專業(yè)學(xué)生的“計(jì)算機(jī)基礎(chǔ)”課程成績(jī)按降序排列。 SELECT XM AS 姓名, KCM AS 課程名, CJ AS 成績(jī) FROM XS,KC,X
42、S_KC WHERE XS.XH=XS_KC.XH AND XS_KC.KCH= KC.KCH AND KCM= 計(jì)算機(jī)基礎(chǔ) AND ZYM= 計(jì)算機(jī) ORDER BY CJ DESC;執(zhí)行的結(jié)果為:姓名課程名成績(jī)張蔚計(jì)算機(jī)基礎(chǔ)95趙琳計(jì)算機(jī)基礎(chǔ)91韋嚴(yán)平計(jì)算機(jī)基礎(chǔ)90林一帆計(jì)算機(jī)基礎(chǔ)85王林計(jì)算機(jī)基礎(chǔ)80李明計(jì)算機(jī)基礎(chǔ)78張強(qiáng)民計(jì)算機(jī)基礎(chǔ)66李方方計(jì)算機(jī)基礎(chǔ)65嚴(yán)紅計(jì)算機(jī)基礎(chǔ)63王燕計(jì)算機(jī)基礎(chǔ)624.2.7 SELECT語(yǔ)句的UNION子句使用UNION子句可以將兩個(gè)或多個(gè)SELECT查詢的結(jié)果合并成一個(gè)結(jié)果集,其格式為: | ( ) UNION A LL | ( ) UNION A LL
43、| ( ) n 其中query specification和query expression都是SELECT查詢語(yǔ)句。使用 UNION 組合兩個(gè)查詢的結(jié)果集的基本規(guī)則是: (1) 所有查詢中的列數(shù)和列的順序必須相同。(2) 數(shù)據(jù)類型必須兼容。 關(guān)鍵字ALL表示合并的結(jié)果中包括所有行,不去除重復(fù)行。不使用ALL則在合并的結(jié)果去除重復(fù)行。含有UNION的SELECT查詢也稱為聯(lián)合查詢。4.2.7 SELECT語(yǔ)句的UNION子句【例4.48】設(shè)在XSCJ數(shù)據(jù)庫(kù)中建兩個(gè)表:數(shù)學(xué)系學(xué)生、外語(yǔ)系學(xué)生,表結(jié)構(gòu)與XS表相同,兩個(gè)表分別存儲(chǔ)數(shù)學(xué)系和外語(yǔ)系的學(xué)生情況,下列語(yǔ)句將這兩個(gè)表的數(shù)據(jù)合并到XS表中。 S
44、ELECT * FROM XS UNION ALL SELECT * FROM 數(shù)學(xué)系學(xué)生 UNION ALL SELECT * FROM 外語(yǔ)系學(xué)生;UNION操作常用于歸并數(shù)據(jù),例如歸并月報(bào)表形成年報(bào)表,歸并各部門數(shù)據(jù)等。注意UNION還可以與GROUP BY及ORDER BY一起使用,用來(lái)對(duì)合并所得的結(jié)果表進(jìn)行分組或排序。4.3數(shù)據(jù)庫(kù)的視圖4.3.1視圖的概念視圖是從一個(gè)或多個(gè)表(或視圖)導(dǎo)出的表。視圖與表(有時(shí)為與視圖區(qū)別,也稱表為基表Base Table)不同,視圖是一個(gè)虛表,即視圖所對(duì)應(yīng)的數(shù)據(jù)不進(jìn)行實(shí)際存儲(chǔ),數(shù)據(jù)庫(kù)中只存儲(chǔ)視圖的定義,對(duì)視圖的數(shù)據(jù)進(jìn)行操作時(shí),系統(tǒng)根據(jù)視圖的定義去操作
45、與視圖相關(guān)聯(lián)的基表。視圖可以由以下任意一項(xiàng)組成:(1)一個(gè)基表的任意子集(2)兩個(gè)或者兩個(gè)以上基表的合集(3)兩個(gè)或者兩個(gè)以上基表的交集(4)對(duì)一個(gè)或者多個(gè)基表運(yùn)算的結(jié)果集合另一個(gè)視圖的子集4.3.1視圖的概念視圖一經(jīng)定義以后,就可以象表一樣被查詢、修改、刪除和更新。使用視圖有下列優(yōu)點(diǎn):(1)為用戶集中數(shù)據(jù),簡(jiǎn)化用戶的數(shù)據(jù)查詢和處理。(2)屏蔽數(shù)據(jù)庫(kù)的復(fù)雜性。 (3)簡(jiǎn)化用戶權(quán)限的管理。 (4)便于數(shù)據(jù)共享。 (5) 可以重新組織數(shù)據(jù)以便輸出到其它應(yīng)用程序中。 4.3.2創(chuàng)建視圖1. 用OEM創(chuàng)建視圖以在XSCJ數(shù)據(jù)庫(kù)中創(chuàng)建CS_XS(描述計(jì)算機(jī)專業(yè)學(xué)生情況)視圖說(shuō)明創(chuàng)建視圖的過(guò)程。(1) 在
46、如圖4.6所示的界面中,選擇單擊視圖進(jìn)入“視圖搜索”界面,如圖4.7所示。在該界面選擇對(duì)象類型, 并可以選擇輸入方案名稱和對(duì)象名稱, 單擊“開(kāi)始”按鈕,查找滿足條件的對(duì)象類型,若存在滿足條件的對(duì)象類型,在結(jié)果項(xiàng)可以查找到的對(duì)象類型。 圖4.6 Oracle企業(yè)管理器 圖4.7視圖搜索界面 4.3.2創(chuàng)建視圖1. 用OEM創(chuàng)建視圖(2)單擊“創(chuàng)建”按鈕,進(jìn)入視圖創(chuàng)建界面,如圖4.8所示。 圖4.8 一般信息選項(xiàng)界面 4.3.2創(chuàng)建視圖創(chuàng)建界面有三個(gè)選項(xiàng)頁(yè)面:一般信息、選項(xiàng)和對(duì)象選項(xiàng)頁(yè)面。一般信息頁(yè)面如圖4.8所示,主要定義視圖的基本信息,如名稱、所屬用戶方案等。選項(xiàng)(如圖4.9所示)和對(duì)象選項(xiàng)卡
47、(如圖4.10所示),定義視圖的一些高級(jí)選項(xiàng),如視圖是否只讀、約束條件等。 圖4.9選項(xiàng)選項(xiàng)界面 圖4.10對(duì)象選項(xiàng)界面4.3.2創(chuàng)建視圖1.用OEM創(chuàng)建視圖一般信息頁(yè)面:在“名稱”文本框輸入視圖名稱CS_XS;用戶方案選ADMIN;在“查詢文本”中輸入創(chuàng)建視圖的SQL語(yǔ)句,如圖4.8所示的SQL語(yǔ)句。如果有同名視圖存在,若選中“若存在則替換”復(fù)選框,那么將用現(xiàn)在定義的視圖代替原有同名的視圖;否則系統(tǒng)將提示錯(cuò)誤信息“視圖已存在”,要求重新命名。在別名文本框可以為視圖定義別名。 選項(xiàng)選項(xiàng)頁(yè)面:若選中“強(qiáng)制”選項(xiàng),則指定創(chuàng)建視圖而無(wú)須考慮視圖基表是否存在或包含該視圖的方案所有者是否具有權(quán)限。只有選
48、中“限制”復(fù)選框后才能設(shè)置只讀或是否具有約束條件?!爸蛔x”單選項(xiàng)規(guī)定視圖中不能執(zhí)行刪除、插入、更新操作,只能檢索數(shù)據(jù)?!皫в袕?fù)選選項(xiàng)”指定在視圖中執(zhí)行插入和更新操作時(shí),必須能使該視圖查詢可以選擇這些數(shù)據(jù),但如果視圖的查詢中包含子查詢或該視圖是基于其它視圖的,這項(xiàng)指定不一定生效?!凹s束條件”是指定分配給“復(fù)選選項(xiàng)”約束條件的名稱。 對(duì)象選項(xiàng)頁(yè)面:該選項(xiàng)頁(yè)面僅用于對(duì)象視圖。如果您處理的不是對(duì)象視圖, 則可跳過(guò)此選項(xiàng)卡。如果想創(chuàng)建對(duì)象視圖,則要選中“作為對(duì)象視圖”復(fù)選框,選擇對(duì)象類型,然后選擇默認(rèn)屬性或是選擇可用屬性列表列出的對(duì)象屬性。(6)單擊“確定”,系統(tǒng)執(zhí)行創(chuàng)建視圖操作完成后返回如圖4.7所示
49、界面。4.3.2創(chuàng)建視圖2.使用CREATE VIEW語(yǔ)句創(chuàng)建視圖PL/SQL中用于創(chuàng)建視圖的語(yǔ)句是CREATE OR REPLACE VIEW語(yǔ)句。語(yǔ)法格式:CREATE OR REPLACE FORCE | NOFORCE VIEW schema.view_name ( column_name ,n ) AS select_statementWITH CHECK OPTIONCONSTRAINT constraint_nameWITH READ ONLY【例4.49】創(chuàng)建CS_KC視圖,包括計(jì)算機(jī)專業(yè)各學(xué)生的學(xué)號(hào)、其選修的課程號(hào)及成績(jī)。要保證對(duì)該視圖的修改都要符合專業(yè)名為計(jì)算機(jī)這個(gè)條件。
50、CREATE OR REPLACE VIEW CS_KC AS SELECT XS.XH,KCH,CJ FROM XS,XS_KC WHERE XS.XH=XS_KC.XH AND ZYM= 計(jì)算機(jī)WITH CHECK OPTION;4.3.2創(chuàng)建視圖【例4.50】創(chuàng)建計(jì)算機(jī)專業(yè)學(xué)生的平均成績(jī)視圖CS_KC_AVG,包括學(xué)號(hào)(在視圖中列名為num)和平均成績(jī)(在視圖中列名為score_avg)。 CREATE OR REPLACE VIEW CS_KC_AVG(num,score_avg) AS SELECT XH,AVG(CJ) FROM XS_KC GROUP BY XH;4.3.3查詢視
51、圖1.SELECT語(yǔ)句查詢視圖【例4.51】查找計(jì)算機(jī)專業(yè)的學(xué)生學(xué)號(hào)和選修的課程號(hào)。 SELECT XH,KCH FROM CS_KC;【例4.52】查找平均成績(jī)?cè)?0分以上的學(xué)生的學(xué)號(hào)和平均成績(jī)。本例首先創(chuàng)建學(xué)生平均成績(jī)視圖XS_KC_AVG,包括學(xué)號(hào)(在視圖中列名為num)和平均成績(jī)(在視圖中列名為score_avg)。 CREATE OR REPLACE VIEW XS_KC_AVG ( num,score_avg ) AS SELECT XH,AVG(CJ) FROM XS_KC GROUP BY XH;再對(duì)XS_KC_AVG視圖進(jìn)行查詢。 SELECT * FROM XS_KC_AV
52、G WHERE score_avg=80;4.3.3查詢視圖【例4.52】查找平均成績(jī)?cè)?0分以上的學(xué)生的學(xué)號(hào)和平均成績(jī)。執(zhí)行結(jié)果為:num score_avg061110 91061201 80061203 87061204 91061216 81061220 82061241 904.3.4 更新視圖通過(guò)更新視圖(包括插入、修改和刪除)數(shù)據(jù)可以修改基表數(shù)據(jù)。但并不是所有的視圖都可以更新,只有對(duì)滿足可更新條件的視圖,才能進(jìn)行更新。1.可更新視圖要通過(guò)視圖更新基表數(shù)據(jù),必須保證視圖是可更新視圖。一個(gè)可更新視圖滿足以下條件:(1)沒(méi)有使用連接函數(shù)、集合運(yùn)算函數(shù)和組函數(shù);(2)創(chuàng)建視圖的SELEC
53、T語(yǔ)句中沒(méi)有聚合函數(shù)且沒(méi)有GROUP BY、ONNECT BY、START WITH子句及DISTINCT關(guān)鍵字;(3)創(chuàng)建視圖的SELECT語(yǔ)句中不包含從基表列通過(guò)計(jì)算所得的列;(4)創(chuàng)建視圖沒(méi)有包含只讀屬性?!纠?.53】在XSCJ數(shù)據(jù)庫(kù)中使用以下語(yǔ)句創(chuàng)建可更新視圖CS_XS1。 CREATE OR REPLACE VIEW CS_XS1 AS SELECT * FROM XS WHERE ZYM= 計(jì)算機(jī);4.3.4 更新視圖2.插入數(shù)據(jù)使用INSERT語(yǔ)句通過(guò)視圖向基本表插入數(shù)據(jù)?!纠?.54】向CS_XS1視圖中插入一條記錄:( 001115 , 劉明儀, 計(jì)算機(jī), 男,1984-3
54、-2, 50 , 三好學(xué)生 ) INSERT INTO CS_XS1 VALUES(001115, 劉明儀,計(jì)算機(jī),男, TO_DATE(19840302,YYYYMMDD),50, 三好學(xué)生);使用SELECT語(yǔ)句查詢CS_XS1依據(jù)的基本表XS: SELECT * FROM XS;將會(huì)看到該表已添加了學(xué)號(hào)為001115的數(shù)據(jù)行。4.3.4 更新視圖3.修改數(shù)據(jù)使用UPDATE語(yǔ)句可以通過(guò)視圖修改基本表的數(shù)據(jù)?!纠?.55】將CS_XS視圖中所有學(xué)生的總學(xué)分增加8。 UPDATE CS_XS SET 總學(xué)分=總學(xué)分+ 8;該語(yǔ)句實(shí)際上是將CS_XS視圖所依賴的基本表XS中所有專業(yè)名為“計(jì)算機(jī)
55、”的記錄的總學(xué)分字段值在原來(lái)基礎(chǔ)上增加8。若一個(gè)視圖依賴于多個(gè)基本表,則一次修改該視圖只能變動(dòng)一個(gè)基本表的數(shù)據(jù)?!纠?.56】將CS_KC視圖中學(xué)號(hào)為001101的學(xué)生的101課程成績(jī)改為90。 UPDATE CS_KC SET CJ=90 WHERE XH=001101 AND KCH=101;4.3.4 更新視圖4.刪除數(shù)據(jù)使用DELETE語(yǔ)句可以通過(guò)視圖刪除基本表的數(shù)據(jù)。但要注意,對(duì)于依賴于多個(gè)基本表的視圖,不能使用DELETE語(yǔ)句。例如,不能通過(guò)對(duì)CS_KC視圖執(zhí)行DELETE語(yǔ)句而刪除與之相關(guān)的基本表XS及XS_KC表的數(shù)據(jù)。【例4.57】刪除CS_XS中女同學(xué)的記錄。 DELETE
56、 FROM CS_XS WHERE XB=女;4.3.5修改視圖的定義修改視圖定義可以通過(guò)OEM的界面進(jìn)行,也可使用PL/SQL語(yǔ)句。1.通過(guò)OEM修改視圖在如圖4.11所示的窗口中,在一般信息選項(xiàng)卡中,對(duì)視圖定義進(jìn)行修改。在選項(xiàng)和對(duì)象選項(xiàng)卡中,修改指定選項(xiàng)或?qū)σ晥D的約束條件等。修改完畢后單擊“應(yīng)用”按鈕即可。圖4.11 修改視圖定義4.3.5修改視圖的定義2.使用SQL命令修改視圖Oracle提供了ALTER VIEW語(yǔ)句,但它不是用于修改視圖定義,只是用于重新編譯或驗(yàn)證現(xiàn)有視圖。 【例4.58】修改視圖CS_KC的定義,包括學(xué)號(hào)、姓名、選修的課程號(hào)、課程名和成績(jī)。CREATE OR REP
57、LACE FORCE VIEW CS_KCASSELECT XS.XH, XS.XM, XS_KC.KCH, KC.KCM, CJ FROM XS, XS_KC, KC WHERE XS.XH=XS_KC.XH AND XS_KC.KCH=KC.KCH AND ZYM=通信工程 WITH CHECK OPTION;4.3.6刪除視圖如果不再需要視圖了,可以通過(guò)OEM和PL/SQL語(yǔ)句兩種方式,把視圖的定義從數(shù)據(jù)庫(kù)中刪除。刪除一個(gè)視圖,就是刪除其定義和賦予的全部權(quán)限。 在如圖4.12界面中,選中要?jiǎng)h除的視圖,單擊“刪除”,出現(xiàn)確認(rèn)界面,單擊“是”按鈕即可刪除所選擇的視圖。圖4.12 刪除視圖4.
58、3.6刪除視圖刪除視圖的PL/SQL語(yǔ)句是DROP VIEW,格式為:DROP VIEW schema.view_name其中schema是所要?jiǎng)h除視圖的用戶方案;view_name是視圖名。例如:DROP VIEW CS_KC;將刪除視圖CS_KC。4.4 格式化輸出結(jié)果4.4.1替換變量在SQL*Plus環(huán)境中,可以使用替換變量來(lái)臨時(shí)存儲(chǔ)有關(guān)的數(shù)據(jù)。Oracle使用3種類型的替換變量。1.&替換變量在SELECT語(yǔ)句中,如果某個(gè)變量前面使用了&符號(hào),那么表示該變量是一個(gè)替換變量。在執(zhí)行SELECT語(yǔ)句時(shí),系統(tǒng)會(huì)提示用戶為該變量提供一個(gè)具體的值?!纠?.59】查詢XSCJ數(shù)據(jù)庫(kù)XS表計(jì)算機(jī)專
59、業(yè)的同學(xué)情況。SELECT XH AS 學(xué)號(hào), XM AS 姓名FROM XSWHERE ZYM=&specialty_name;4.4.1替換變量1.&替換變量【例4.60】查找平均成績(jī)?cè)?0分以上的學(xué)生的學(xué)號(hào)、姓名和平均成績(jī)。 SET VERIFY ON SELECT * FROM XS_KC_AVG WHERE score_avg=score_avg;執(zhí)行過(guò)程為:輸入score_avg的值: 80原值3:WHERE score_avg=score_avg新值3:WHERE score_avg=80替換變量不僅僅可以用在WHERE子句中,而且還可以用在下列部分:(1)ORDER BY子句。
60、(2)列表達(dá)式。(3)表名。(4)整個(gè)SELECT語(yǔ)句 4.4.1替換變量1.&替換變量【例4.61】查找選修了“離散數(shù)學(xué)”課程的學(xué)生學(xué)號(hào)、姓名、課程名及成績(jī)。 SELECT XS.XH, &name, KCM, &column FROM XS, &kc, XS_KC WHERE XS.XH=XS_KC.XH AND &condition AND KCM=&kcm ORDER BY & column;執(zhí)行過(guò)程及結(jié)果為:輸入 name 的值: XM輸入 column 的值: CJ原值 1: SELECT XS.XH,&name,KCM,&column新值 1: SELECT XS.XH,XM,K
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度廁所革命項(xiàng)目廁所革命標(biāo)準(zhǔn)制定與實(shí)施合同3篇
- 2025年度智能溫室大棚建筑與物聯(lián)網(wǎng)技術(shù)合同4篇
- 2025年度臨時(shí)用電安全設(shè)施更新改造協(xié)議4篇
- 2025年度美團(tuán)外賣商家客戶關(guān)系管理系統(tǒng)協(xié)議4篇
- 2025年建筑材料綠色生產(chǎn)技術(shù)研發(fā)與應(yīng)用合同3篇
- 2025年鴨苗養(yǎng)殖與冷鏈物流銷售合同規(guī)范3篇
- IT行業(yè)專屬保密合同書(shū)樣本下載版B版
- 科技前沿西安創(chuàng)新企業(yè)概覽
- 個(gè)人車輛租賃(2024版)
- 孕婦職場(chǎng)活力秘訣工作與健康雙豐收
- 高校鑄牢中華民族共同體意識(shí)教育的路徑研究
- 《面神經(jīng)炎護(hù)理措施分析》3900字(論文)
- 城市微電網(wǎng)建設(shè)實(shí)施方案
- 企業(yè)文化融入中華傳統(tǒng)文化的實(shí)施方案
- 9.1增強(qiáng)安全意識(shí) 教學(xué)設(shè)計(jì) 2024-2025學(xué)年統(tǒng)編版道德與法治七年級(jí)上冊(cè)
- 《化工設(shè)備機(jī)械基礎(chǔ)(第8版)》全套教學(xué)課件
- 人教版八年級(jí)數(shù)學(xué)下冊(cè)舉一反三專題17.6勾股定理章末八大題型總結(jié)(培優(yōu)篇)(學(xué)生版+解析)
- 2024屆上海高考語(yǔ)文課內(nèi)古詩(shī)文背誦默寫(xiě)篇目(精校版)
- DL-T5024-2020電力工程地基處理技術(shù)規(guī)程
- 初中數(shù)學(xué)要背誦記憶知識(shí)點(diǎn)(概念+公式)
- 駕照體檢表完整版本
評(píng)論
0/150
提交評(píng)論