oracle10g經(jīng)典實(shí)戰(zhàn)第4章 數(shù)據(jù)庫的查詢和視圖_第1頁
oracle10g經(jīng)典實(shí)戰(zhàn)第4章 數(shù)據(jù)庫的查詢和視圖_第2頁
oracle10g經(jīng)典實(shí)戰(zhàn)第4章 數(shù)據(jù)庫的查詢和視圖_第3頁
oracle10g經(jīng)典實(shí)戰(zhàn)第4章 數(shù)據(jù)庫的查詢和視圖_第4頁
oracle10g經(jīng)典實(shí)戰(zhàn)第4章 數(shù)據(jù)庫的查詢和視圖_第5頁
已閱讀5頁,還剩114頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第4章數(shù)據(jù)庫的查詢和視圖

4.1連接、選擇和投影

Oracle是一個關(guān)系數(shù)據(jù)庫管理系統(tǒng),關(guān)系數(shù)據(jù)庫建立在關(guān)系模型基礎(chǔ)之上,具有嚴(yán)格的數(shù)學(xué)理論基礎(chǔ)。關(guān)系數(shù)據(jù)庫對數(shù)據(jù)的操作除了包括集合代數(shù)的并、差等運(yùn)算之外,還定義了一組專門的關(guān)系運(yùn)算:連接、選擇和投影,關(guān)系運(yùn)算的特點(diǎn)是運(yùn)算的對象和結(jié)果都是表。

4.1.1選擇選擇(Selection),簡單的說就是通過一定的條件把自己所需要的數(shù)據(jù)檢索出來。選擇是單目運(yùn)算,其運(yùn)算對象是一個表。該運(yùn)算按給定的條件,從表中選出滿足條件的行形成一個新表,作為運(yùn)算結(jié)果。?4.1.1選擇【例4.1】學(xué)生情況表如表4.1所示。若要在學(xué)生情況表中找出學(xué)生表中性別為女且平均成績在80分以上的行形成一個新表,該選擇運(yùn)算的結(jié)果如表4.2所示。表4.1學(xué)生表

表4.2查詢后的結(jié)果?4.1.2投影投影(Projection)也是單目運(yùn)算。投影就是選擇表中指定的列,這樣在查詢結(jié)果中只顯示指定數(shù)據(jù)列,減少了顯示的數(shù)據(jù)量也提高查詢的性能?!纠?.2】若在表4.1中對“姓名”和“平均成績”投影,該查詢得到如表4.3所示的新表。表4.3投影后的新表?4.1.3連接連接(JOIN)是把兩個表中的行按照給定的條件進(jìn)行拼接而形成新表?!纠?.3】若表A和B分別如表4.4和表4.5所示,則連接后結(jié)果如表4.6所示。表4.4A表表4.5B表表4.6連接后的表?4.1.3連接【例4.4】若表A和表B分別如表4.7和表4.8所示,自然連接后的新表C如表4.9所示。

表4.7A表

表4.8B表

表4.9C表

?4.2數(shù)據(jù)庫的查詢使用數(shù)據(jù)庫和表的主要目的是存儲數(shù)據(jù)以便在需要時進(jìn)行檢索、統(tǒng)計或組織輸出,通過PL/SQL的查詢可以從表或視圖中迅速方便地檢索數(shù)據(jù)。PL/SQL的SELECT語句可以實(shí)現(xiàn)對表的選擇、投影及連接操作,其功能十分強(qiáng)大。下面介紹SELECT語句,它是PL/SQL的核心。SELECT語句很復(fù)雜,主要的子句如下:語法格式:

SELECTselect_list /*指定要選擇的列或行及其限定*/FROMtable_source/*FROM子句,指定表或視圖*/[WHEREsearch_condition]/*WHERE子句,指定查詢條件*/[GROUPBYgroup_by_expression]/*GROUPBY子句,指定分組表達(dá)式*/[HAVINGsearch_condition]/*HAVING子句,指定分組統(tǒng)計條件*/[ORDERBYorder_expression[ASC|DESC]]/*ORDER子句,指定排序表達(dá)式和順序*/?4.2.1選擇列選擇表中的列組成結(jié)果表,通過SELECT語句的SELECT子句來表示。語法格式:

SELECT[ALL|DISTINCT]<select_list>其中select_list指出了結(jié)果的形式,select_list的主要格式為:{* /*選擇當(dāng)前表或視圖的所有列*/ |{table_name|view_name|table_alias}.*/*選擇指定的表或視圖的所有列*/ |{colume_name|expression}[[AS]column_alias]/*選擇指定的列*/ |column_alias=expression /*選擇指定列并更改列標(biāo)題*/}[,…n]1. 選擇一個表中指定的列使用SELECT語句選擇一個表中的某些列,各列名之間要以逗號分隔。語法格式:SELECTcolumn_name[,column_name…]FROMtable_nameWHEREsearch_condition其功能是在FROM子句指定的表中檢索符合search_condition條件的列。?4.2.1選擇列【例4.5】查詢XSCJ數(shù)據(jù)庫的XS表中各個同學(xué)的XM、XH和ZXF。SELECTXH,XM,ZXFFROMXS;執(zhí)行結(jié)果如圖4.1所示。圖4.1在XS表中選擇列

?4.2.1選擇列【例4.6】查詢XS表中ZXF大于45同學(xué)的XH、XM和ZXF。SELECTXH,XM,ZXFFROMXSWHEREZXF>45;當(dāng)在SELECT語句指定列的位置上使用*號時,表示選擇表的所有列?!纠?.7】查詢XS表中的所有列。 SELECT* FROMXS;該語句等價于語句: SELECTXH,XM,ZYM,XB,CSSJ,ZXF,BZ FROMXS;其執(zhí)行后將列出XS表中的所有數(shù)據(jù)。?4.2.1選擇列2.修改查詢結(jié)果中的列標(biāo)題當(dāng)希望查詢結(jié)果中的某些列或所有列顯示時使用自己選擇的列標(biāo)題時,可以在列名之后使用AS子句來更改查詢結(jié)果的列標(biāo)題名,其中column_alias是指定的列標(biāo)題?!纠?.8】查詢XS表中計算機(jī)同學(xué)的XH、XM和ZXF,結(jié)果中各列的標(biāo)題分別指定為學(xué)號、姓名和總學(xué)分。SELECTXHAS學(xué)號,XMAS姓名,ZXFAS總學(xué)分FROMXSWHEREZYM=’計算機(jī)’;該語句的執(zhí)行結(jié)果如圖4.2所示。更改查詢結(jié)果中的列標(biāo)題可以省略AS關(guān)鍵字。例如:SELECTXH學(xué)號,XM姓名,ZXF總學(xué)分FROMXSWHEREZYM=’計算機(jī)’;?4.2.1選擇列圖4.2更改查詢結(jié)果中的列標(biāo)題

?4.2.1選擇列3.計算列值使用SELECT對列進(jìn)行查詢時,在結(jié)果中可以輸出對列值計算后的值,即SELECT子句可使用表達(dá)式作為結(jié)果,格式為:SELECTexpression[,expression]【例4.9】創(chuàng)建產(chǎn)品銷售數(shù)據(jù)庫XSH,并在其中創(chuàng)建產(chǎn)品表CP,其表結(jié)構(gòu)如表4.10所

表4.10CP表結(jié)構(gòu)

?4.2.1選擇列設(shè)CP表中已有如表4.11所示的數(shù)據(jù)。

表4.11CP表

?4.2.1選擇列下列語句將列出產(chǎn)品名稱和產(chǎn)品總值:SELECTCPMCAS產(chǎn)品名稱,JG*KCLAS產(chǎn)品總值FROMCP;該語句的執(zhí)行結(jié)果如圖4.3所示。圖4.3計算列值?4.2.1選擇列4. 消除結(jié)果集中的重復(fù)行【例4.10】對XSCJ數(shù)據(jù)庫的XS表只選擇ZYM和ZXF,消除結(jié)果集中的重復(fù)行。SELECTDISTINCTZYMAS專業(yè)名,ZXFAS總學(xué)分FROMXS; 該語句執(zhí)行的結(jié)果為:專業(yè)名總學(xué)分計算機(jī) 48計算機(jī) 50計算機(jī) 52計算機(jī) 54通信工程 40通信工程 42通信工程 44通信工程 50與DISTINCT相反,當(dāng)使用關(guān)鍵字ALL時,將保留結(jié)果集的所有行。?4.2.1選擇列【例4.11】以下的SELECT語句對XSCJ數(shù)據(jù)庫的XS表選擇ZYM和ZXF,不消除結(jié)果集中的重復(fù)行。SELECTALLZYMAS專業(yè)名,ZXFAS總學(xué)分FROMXS;該語句執(zhí)行后結(jié)果為:專業(yè)名總學(xué)分計算機(jī) 50計算機(jī) 50計算機(jī) 50計算機(jī) 50計算機(jī) 54計算機(jī) 52計算機(jī) 50計算機(jī) 50計算機(jī) 50計算機(jī) 48計算機(jī)50通信工程 42通信工程 40通信工程 42通信工程 42通信工程 44通信工程 42通信工程 42通信工程 42通信工程 42通信工程 42通信工程 50?4.2.2選擇行1.表達(dá)式比較比較運(yùn)算符用于比較兩個表達(dá)式值,共有7個,分別是:=(等于)、<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、<>(不等于)、!=(不等于)。比較運(yùn)算的格式為:expression{=|<|<=|>|>=|<>|!=}expression當(dāng)兩個表達(dá)式值均不為空值(NULL)時,比較運(yùn)算返回邏輯值TRUE(真)或FALSE(假);而當(dāng)兩個表達(dá)式值中有一個為空值或都為空值時,比較運(yùn)算將返回UNKNOWN。【例4.12】(1)查詢XSH數(shù)據(jù)庫CP表中庫存量在500以上的產(chǎn)品情況。SELECT* FROMCPWHEREKCL>500;(2)查詢XSCJ數(shù)據(jù)庫XS表中通信工程專業(yè)總學(xué)分大于等于42的同學(xué)的情況。SELECT* FROMXS WHEREZYM=’通信工程’andZXF>=42;?4.2.2選擇行2.

模式匹配LIKE謂詞用于指出一個字符串是否與指定的字符串相匹配,其運(yùn)算對象可以是char、varchar2和date類型的數(shù)據(jù),返回邏輯值TRUE或FALSE。LIKE謂詞表達(dá)式的格式為:string_expression[NOT]LIKEstring_expression【例4.13】查詢XSH數(shù)據(jù)庫CP表中產(chǎn)品名含有“冰箱”的產(chǎn)品情況。SELECT* FROMCP WHERECPMCLIKE‘%冰箱%’;執(zhí)行結(jié)果為:CPBHCPMCJGKCL10001100 冰箱A_100 1500.0 50010002120 冰箱A_200 1850.0 20010001200 冰箱B_200 1600.0 120010001102 冰箱C_210 1890.0600?4.2.2選擇行【例4.14】查詢XSCJ數(shù)據(jù)庫XS表中姓“王”且單名的學(xué)生情況。SELECT* FROMXS WHEREXMLIKE‘王_’;執(zhí)行結(jié)果為:XHXMZYMXBCSSJZXFBZ061101 王林計算機(jī) 男 10-二月-8650 061103 王燕計算機(jī) 女 06-十月-8550 061201 王敏通信工程 男 10-六月-8442 061202 王林通信工程男 29-一月-8540有一門課不及格,待補(bǔ)考3.范圍比較用于范圍比較的關(guān)鍵字有兩個:BETWEEN和IN。當(dāng)要查詢的條件是某個值的范圍時,可以使用BETWEEN關(guān)鍵字。BETWEEN關(guān)鍵字指出查詢范圍,格式為:expression[NOT]BETWEENexpression1ANDexpression2當(dāng)不使用NOT時,若表達(dá)式expression的值在表達(dá)式expression1與expression2之間(包括這兩個值),則返回TRUE,否則返回FALSE;使用NOT時,返回值剛好相反。注意:expression1的值不能大于expression2的值。?4.2.2選擇行【例4.15】(1)

查詢XSH數(shù)據(jù)庫CP表中價格在2000元與4000元之間的產(chǎn)品情況。SELECT* FROMCP WHEREJGBETWEEN2000AND4000;(2)查詢XSCJ數(shù)據(jù)庫XS表中不在1985年出生的學(xué)生情況。SELECT* FROMXS WHERECSSJNOTBETWEENTO_DATE(‘19850101’,’YYYYMMDD’)and TO_DATE(‘19851231’,’YYYYMMDD’);使用IN關(guān)鍵字可以指定一個值表,值表中列出所有可能的值,當(dāng)表達(dá)式與值表中的任一個匹配時,即返回TRUE,否則返回FALSE。使用IN關(guān)鍵字指定值表的格式為:expressionIN(expression[,…n])【例4.16】查詢XSH數(shù)據(jù)庫CP表中庫存量為“200”、“300”和“500”的情況。SELECT* FROMCP WHEREKCLIN(200,300,500);該語句與下列語句等價:SELECT* FROMCP WHEREKCL=200ORKCL=300ORKCL=500;?4.2.2選擇行4. 空值比較當(dāng)需要判定一個表達(dá)式的值是否為空值時,使用ISNULL關(guān)鍵字,格式為:expressionIS[NOT]NULL當(dāng)不使用NOT時,若表達(dá)式expression的值為空值,返回TRUE,否則返回FALSE;當(dāng)使用NOT時,結(jié)果剛好相反?!纠?.17】查詢XSCJ數(shù)據(jù)庫中總學(xué)分尚不定的學(xué)生情況。SELECT* FROMXS WHEREZXFISNULL;?4.2.2選擇行5. 子查詢在查詢條件中,可以使用另一個查詢的結(jié)果作為條件的一部分,例如判定列值是否與某個查詢的結(jié)果集中的值相等,作為查詢條件一部分的查詢稱為子查詢。PL/SQL允許SELECT多層嵌套使用,用來表示復(fù)雜的查詢。子查詢除了可以用在SELECT語句中,還可以用在INSERT、UPDATE及DELETE語句中。子查詢通常與IN、EXIST謂詞及比較運(yùn)算符結(jié)合使用。(1) IN子查詢IN子查詢用于進(jìn)行一個給定值是否在子查詢結(jié)果集中的判斷,格式為: expression[NOT]IN(subquery)其中subquery是子查詢。當(dāng)表達(dá)式expression與子查詢subquery的結(jié)果表中的某個值相等時,IN謂詞返回TRUE,否則返回FALSE;若使用了NOT,則返回的值剛好相反。?4.2.2選擇行【例4.18】在XSCJ數(shù)據(jù)庫中有描述課程情況的表KC和描述學(xué)生成績表的表XS_KC(表的結(jié)構(gòu)和樣本數(shù)據(jù)見附錄A)。查找選修了課程號為101的課程的學(xué)生的情況: SELECT* FROMXS WHEREXHIN (SELECTXHFROMXS_KCWHEREKCH=‘101’);在執(zhí)行包含子查詢的SELECT語句時,系統(tǒng)先執(zhí)行子查詢,產(chǎn)生一個結(jié)果表,再執(zhí)行查詢。本例中,先執(zhí)行子查詢: SELECTXH FROMXS_KC WHEREKCH=‘101’;得到一個只含有學(xué)號列的表,XS_KC中課程名列值為‘101’的行在結(jié)果表中都有一行。再執(zhí)行外查詢,若XS表中某行的學(xué)號列值等于子查詢結(jié)果表中的任一個值,則該行就被選擇。?4.2.2選擇行【例4.19】查找未選修離散數(shù)學(xué)的學(xué)生的情況。SELECTXH,XM,ZYM,ZXF FROMXS WHEREXHNOTIN (SELECTXH FROMXS_KC WHEREKCHIN (SELECTKCH FROMKC WHEREKCM='離散數(shù)學(xué)' ) );?執(zhí)行結(jié)果為:XHXMZYMZXF061201 王敏 通信工程 42061202 王林 通信工程 40061203 王玉民通信工程 42061204 馬琳琳通信工程 42061206李計 通信工程 42061210 李紅慶通信工程 44061216 孫祥欣通信工程 42061218 孫研 通信工程 42061220 吳薇華通信工程 42061221 劉燕敏通信工程 42061241 羅林琳通信工程 50?4.2.2選擇行2) 比較子查詢這種子查詢可以認(rèn)為是IN子查詢的擴(kuò)展,它使表達(dá)式的值與子查詢的結(jié)果進(jìn)行比較運(yùn)算,格式為: expression{<|<=|=|>|>=|!=|<>}{ALL|SOME|ANY}(subquery)其中expression為要進(jìn)行比較的表達(dá)式,subquery是子查詢。ALL、SOME和ANY說明對比較運(yùn)算的限制。ALL指定表達(dá)式要與子查詢結(jié)果集中的每個值都進(jìn)行比較,當(dāng)表達(dá)式與每個值都滿足比較的關(guān)系時,才返回TRUE,否則返回FALSE;SOME或ANY表示表達(dá)式只要與子查詢結(jié)果集中的某個值滿足比較的關(guān)系時,就返回TRUE,否則返回FALSE。?4.2.2選擇行【例4.20】查找比所有計算機(jī)系學(xué)生年齡都大的學(xué)生。 SELECT* FROMXS WHERECSSJ<ALL (SELECTCSSJ FROMXS WHEREZYM='計算機(jī)' );執(zhí)行結(jié)果如圖4.4所示。?圖4.4查找結(jié)果?4.2.2選擇行【例4.21】查找課程號206的成績不低于課程號101的最低成績的學(xué)生的學(xué)號。 SELECTXH FROMXS_KC WHEREKCH='206'ANDCJ>=ANY (SELECTCJ FROMXS_KC WHEREKCH='101' );(3) EXISTS子查詢EXISTS謂詞用于測試子查詢的結(jié)果是否為空表,若子查詢的結(jié)果集不為空,則EXISTS返回TRUE,否則返回FALSE。EXISTS還可與NOT結(jié)合使用,即NOTEXISTS,其返回值與EXIST剛好相反。格式為:[NOT]EXISTS(subquery)?4.2.2選擇行【例4.22】查找選修206號課程的學(xué)生姓名。SELECTXM FROMXS WHEREEXISTS (SELECT* FROMXS_KC WHEREXH=XS.XHANDKCH=‘206’ );本例在子查詢的條件中使用了限定形式的列名引用XS.XH,表示這里的學(xué)號列出自表XS。?4.2.2選擇行【例4.23】查找選修了全部課程的同學(xué)的姓名。 SELECTXM FROMXS WHERENOTEXISTS (SELECT* FROMKC WHERENOTEXISTS (SELECT* FROMXS_KC WHEREXH=XS.XHANDKCH=KC.KCH ) );本例即查找沒有一門功課不選修的學(xué)生。?4.2.3查詢對象前面介紹了SELECT的選擇列和行,這里介紹SELECT查詢的對象(即數(shù)據(jù)源)的構(gòu)成形式?!纠?.24】查找001102號同學(xué)所選修的全部課程的同學(xué)的學(xué)號。本例即要查找這樣的學(xué)號y,對所有的課程號x,若001102號同學(xué)選修了該課,那么y也選修了該課。SELECTDISTINCTXHFROMXS_KCCJ1WHERENOTEXISTS(SELECT*FROMXS_KCCJ2WHERECJ2.XH=‘001102’ANDNOTEXISTS(SELECT*FROMXS_KCCJ3WHERECJ3.XH=CJ1.XHANDCJ3.KCH=CJ2.KCH));本例子指定SELECT語句查詢的對象是表。?4.2.3查詢對象【例4.25】在XS表中查找1986年1月1日以前出生的學(xué)生的姓名和專業(yè)名。SELECTXM,ZYMFROM(SELECT*FROMXSWHERECSSJ<TO_DATE(‘19860101’,’YYYYMMDD'));執(zhí)行結(jié)果為:XMZYM王燕 計算機(jī)林一帆 計算機(jī)張強(qiáng)民 計算機(jī)嚴(yán)紅 計算機(jī)王敏 通信工程王林 通信工程馬琳琳 通信工程李計 通信工程李紅慶 通信工程孫祥欣 通信工程劉燕敏 通信工程?4.2.4連接1.連接謂詞可以在SELECT語句的WHERE子句中使用比較運(yùn)算符給出連接條件對表進(jìn)行連接,將這種表示形式稱為連接謂詞表示形式?!纠?.26】查找XSCJ數(shù)據(jù)庫每個學(xué)生的情況以及選修的課程情況。SELECTXS.*,XS_KC.* FROMXS,XS_KC WHEREXS.XH=XS_KC.XH;結(jié)果表將包含XS表和XS_KC表的所有列,結(jié)果如圖4.5所示。?圖4.5連接后的部分?jǐn)?shù)據(jù)?4.2.4連接【例4.27】自然連接查詢。SELECTXS.*,XS_KC.KCH,XS_KC.CJ FROMXS,XS_KC WHEREXS.XH=XS_KC.XH;本例所得的結(jié)果表包含以下字段:學(xué)號、姓名、專業(yè)名、性別、出生時間、總學(xué)分、備注、課程號、成績。若選擇的字段名在各個表中是唯一的,則可以省略字段名前的表名。如本例的SELECT子句也可寫為:SELECTXS.*,KCH,CJ FROMXS,XS_KC WHEREXS.XH=XS_KC.XH;?4.2.4連接【例4.28】查找選修了206課程且成績在80分以上的學(xué)生姓名及成績。SELECTXMAS姓名,CJAS成績 FROMXS,XS_KC WHEREXS.XH=XS_KC.XHANDKCH=‘206’ANDCJ>=80;執(zhí)行結(jié)果為:姓名成績王燕 81李方方 80林一帆 87張蔚 89有時用戶所需要的字段來自兩個以上的表,那么就要對兩個以上的表進(jìn)行連接,稱之為多表連接。?4.2.4連接【例4.29】查找選修了“計算機(jī)基礎(chǔ)”課程且成績在80分以上的學(xué)生學(xué)號、姓名、課程名及成績。SELECTXS.XH,XM,KCM,CJ FROMXS,KC,XS_KC WHEREXS.XH=XS_KC.XHANDKC.KCH=XS_KC.KCH ANDKCM=‘計算機(jī)基礎(chǔ)’ANDCJ>=80;執(zhí)行結(jié)果為:XHXMKCMCJ001101 王林 計算機(jī)基礎(chǔ)80001104 韋嚴(yán)平 計算機(jī)基礎(chǔ)90001108 林一帆 計算機(jī)基礎(chǔ)85001110 張蔚 計算機(jī)基礎(chǔ)95001111 趙琳 計算機(jī)基礎(chǔ)91001201 王敏 計算機(jī)基礎(chǔ)80001203 王玉民 計算機(jī)基礎(chǔ)87001204 馬琳琳 計算機(jī)基礎(chǔ)91001216 孫祥欣 計算機(jī)基礎(chǔ)81001220 吳薇華 計算機(jī)基礎(chǔ)82001241 羅林琳 計算機(jī)基礎(chǔ)90?4.2.4連接2. 以JOIN關(guān)鍵字指定的連接PL/SQL擴(kuò)展了以JOIN關(guān)鍵字指定連接的表示方式,使表的連接運(yùn)算能力有了增強(qiáng)。連接表的格式為:<table_source><join_type><table_source>ON<search_condition> |<table_source>CROSSJOIN<table_source> |<joined_table>其中table_source為需連接的表,join_type表示連接類型,ON用于指定連接條件。join_type的格式為:[INNER|{LEFT|RIGHT|FULL}[OUTER][<join_hint>]JOIN其中INNER表示內(nèi)連接,OUTER表示外連接,join_hint是連接提示。CROSSJOIN表示交叉連接。因此,以JOIN關(guān)鍵字指定的連接有三種類型。?4.2.4連接2. 以JOIN關(guān)鍵字指定的連接(1)內(nèi)連接內(nèi)連接按照ON所指定的連接條件合并兩個表,返回滿足條件的行?!纠?.30】查找XSCJ數(shù)據(jù)庫每個學(xué)生的情況以及選修的課程情況。SELECT* FROMXSINNERJOINXS_KCONXS.XH=XS_KC.XH;結(jié)果表將包含XS表和XS_KC表的所有字段(不去除重復(fù)字段—學(xué)號)。若要去除重復(fù)的學(xué)號字段,可將SELECT子句改為:SELECTXS.*,KCH,CJ【例4.31】用FROM的JOIN關(guān)鍵字表達(dá)下列查詢:查找選修了206課程且成績在80分以上的學(xué)生姓名及成績。SELECTXM,CJ FROMXSJOINXS_KCONXS.XH=XS_KC.XH WHEREKCH='206'ANDCJ>=80;內(nèi)連接還可以用于多個表的連接。?4.2.4連接【例4.32】用FROM的JOIN關(guān)鍵字表達(dá)下列查詢:查找選修了“計算機(jī)基礎(chǔ)”課程且成績在80分以上的學(xué)生學(xué)號、姓名、課程名及成績。SELECTXS.XH,XM,KCM,CJ FROMXSJOINXS_KCJOINKCONXS_KC.KCH=KC.KCH ONXS.XH=XS_KC.XH WHEREKCM='計算機(jī)基礎(chǔ)'ANDCJ>=80;作為一種特例,可以將一個表與它自身進(jìn)行連接,稱為自連接。若要在一個表中查找具有相同列值的行,則可以使用自連接。使用自連接時需為表指定兩個別名,且對所有列的引用均要用別名限定?!纠?.33】查找不同課程成績相同的學(xué)生的學(xué)號、課程號和成績。SELECTa.XH,a.KCH,b.KCH,a.CJ FROMXS_KCaJOINXS_KCbONa.CJ=b.CJANDa.XH=b.XHANDa.KCH!=b.KCH;執(zhí)行結(jié)果為:XHKCHKCHCJ001102 102 206 78001102 206 102 78?4.2.4連接2. 以JOIN關(guān)鍵字指定的連接(2)外連接外連接的結(jié)果表不但包含滿足連接條件的行,還包括相應(yīng)表中的所有行。外連接包括三種:左外連接(LEFTOUTERJOIN):結(jié)果表中除了包括滿足連接條件的行外,還包括左表的所有行;右外連接(RIGHTOUTERJOIN):結(jié)果表中除了包括滿足連接條件的行外,還包括右表的所有行;完全外連接(FULLOUTERJOIN):結(jié)果表中除了包括滿足連接條件的行外,還包括兩個表的所有行。其中的OUTER關(guān)鍵字均可省略。?4.2.4連接【例4.34】查找所有學(xué)生情況及他們選修的課程號,若學(xué)生未選修任何課,也要包括其情況。SELECTXS.*,KCH FROMXSLEFTOUTERJOINXS_KCONXS.XH=XS_KC.XH;本例執(zhí)行時,若有學(xué)生未選任何課程,則結(jié)果表中相應(yīng)行的課程號字段值為NULL?!纠?.35】查找被選修了的課程的選修情況和所有開設(shè)的課程名。SELECTXS_KC.*,KCM FROMXS_KCRIGHTJOINKCONXS_KC.KCH=KC.KCH;本例執(zhí)行時,若某課程未被選修,則結(jié)果表中相應(yīng)行的學(xué)號、課程號和成績字段值均為NULL。注意:外連接只能對兩個表進(jìn)行。?4.2.4連接2. 以JOIN關(guān)鍵字指定的連接(3)交叉連接交叉連接實(shí)際上是將兩個表進(jìn)行笛卡爾積運(yùn)算,結(jié)果表是由第一個表的每行與第二個表的每一行拼接后形成的表,因此結(jié)果表的行數(shù)等于兩個表行數(shù)之積?!纠?.36】列出學(xué)生所有可能的選課情況。SELECTXH,XM,KCH,KCM FROMXSCROSSJOINKC;注意:交叉連接不能有條件,且不能帶WHERE子句。?4.2.5匯總1. 統(tǒng)計函數(shù)統(tǒng)計函數(shù)用于計算表中的數(shù)據(jù),返回單個計算結(jié)果。下面對常用的幾個統(tǒng)計函數(shù)加以介紹。(1)SUM和AVG函數(shù)。SUM和AVG函數(shù)分別用于求表達(dá)式中所有值項(xiàng)的總和與平均值,語法格式為:SUM/AVG([ALL|DISTINCT]expression)其中expression是常量、列、函數(shù)或表達(dá)式。SUM和AVG函數(shù)只能對數(shù)值型數(shù)據(jù)進(jìn)行計算。ALL表示對所有值進(jìn)行運(yùn)算,DISTINCT表示去除重復(fù)值,缺省為ALL。SUM/AVG忽略NULL值。【例4.37】求選修101課程的學(xué)生的平均成績。SELECTAVG(CJ)AS課程101平均成績 FROMXS_KC WHEREKCH='101';執(zhí)行結(jié)果為:課程101平均成績78?4.2.5匯總1.統(tǒng)計函數(shù)(2)MAX和MIN函數(shù)。MAX和MIN函數(shù)分別用于求表達(dá)式中所有值項(xiàng)的最大值與最小值,語法格式為:MAX/MIN([ALL|DISTINCT]expression)其中expression是常量、列、函數(shù)或表達(dá)式,其數(shù)據(jù)類型可以是數(shù)字、字符和時間日期類型。ALL表示對所有值進(jìn)行運(yùn)算,DISTINCT表示去除重復(fù)值,缺省為ALL。MAX/MIN忽略NULL值?!纠?.38】求選修101課程的學(xué)生的最高分和最低分。SELECTMAX(CJ)AS課程101的最高分,MIN(CJ)AS課程101的最低分 FROMXS_KC WHEREKCH='101';執(zhí)行結(jié)果為:課程101的最高分課程101的最低分9562?4.2.5匯總1.統(tǒng)計函數(shù)(3)COUNT函數(shù)。COUNT函數(shù)用于統(tǒng)計組中滿足條件的行數(shù)或總行數(shù),格式為:COUNT({[ALL|DISTINCT]expression}|*)其中expression是一個表達(dá)式。ALL表示對所有值進(jìn)行運(yùn)算,DISTINCT表示去除重復(fù)值,缺省為ALL。選擇*時將統(tǒng)計總行數(shù)。COUNT忽略NULL值?!纠?.39】(1)求學(xué)生的總?cè)藬?shù)。SELECTCOUNT(*)AS學(xué)生總數(shù) FROMXS;COUNT(*)不需要任何參數(shù)。(2)求選修了課程的學(xué)生總?cè)藬?shù)。SELECTCOUNT(DISTINCTXH) FROMXS_KC;(3)統(tǒng)計離散數(shù)學(xué)課程成績在85分以上的人數(shù)。SELECTCOUNT(CJ)AS離散數(shù)學(xué)85分以上的人數(shù) FROMXS_KC WHERECJ>=85ANDKCH= (SELECTKCH FROMKCWHEREKCM='離散數(shù)學(xué)');執(zhí)行結(jié)果為:離散數(shù)學(xué)85分以上的人數(shù)2?4.2.5匯總2. GROUPBY子句GROUPBY子句用于對表或視圖中的數(shù)據(jù)按字段分組,格式為:[GROUPBY[ALL]group_by_expression[,…n]group_by_expression:用于分組的表達(dá)式,其中通常包含字段名。指定ALL將顯示所有組。使用GROUPBY子句后,SELECT子句中的列表中只能包含在GROUPBY中指出的列或在統(tǒng)計函數(shù)中指定的列?!纠?.40】將XSCJ數(shù)據(jù)庫中各專業(yè)名輸出。SELECTZYMAS專業(yè)名 FROMXS GROUPBYZYM;執(zhí)行結(jié)果為:專業(yè)名計算機(jī)通信工程?4.2.5匯總【例4.41】求XSCJ數(shù)據(jù)庫中各專業(yè)的學(xué)生數(shù)。SELECTZYMAS專業(yè)名,COUNT(*)AS學(xué)生數(shù) FROMXS GROUPBYZYM;執(zhí)行結(jié)果為:專業(yè)名學(xué)生數(shù)計算機(jī) 11通信工程 11【例4.42】求被選修的各門課程的平均成績和選修該課程的人數(shù)。SELECTKCHAS課程號,AVG(CJ)AS平均成績,COUNT(XH)AS選修人數(shù) FROMXS_KC GROUPBYKCH;執(zhí)行結(jié)果為:課程號平均成績選修人數(shù)101 78 20102 77 11206 75 11?4.2.5匯總3. HAVING子句使用GROUPBY子句和統(tǒng)計函數(shù)對數(shù)據(jù)進(jìn)行分組后,還可以使用HAVING子句對分組數(shù)據(jù)進(jìn)行進(jìn)一步的篩選。例如查找XSCJ數(shù)據(jù)庫中平均成績在85分以上的學(xué)生,就是在XS_KC數(shù)據(jù)庫上按學(xué)號分組后篩選出符合平均成績大于等于85的學(xué)生。HAVING子句的格式為:[HAVING<search_condition>]其中search_condition為查詢條件,與WHERE子句的查詢條件類似,并且可以使用統(tǒng)計函數(shù)?!纠?.43】查找XSCJ數(shù)據(jù)庫中平均成績在85分以上的學(xué)生的學(xué)號和平均成績。SELECTXHAS學(xué)號,AVG(CJ)AS平均成績 FROMXS_KC GROUPBYXH HAVINGAVG(CJ)>=85;執(zhí)行結(jié)果為:學(xué)號平均成績001110 91001203 8700120491001241 90?4.2.5匯總【例4.44】查找選修課程超過2門且成績都在80分以上的學(xué)生的學(xué)號。SELECTXHAS學(xué)號 FROMXS_KC WHERECJ>=80 GROUPBYXH HAVINGCOUNT(*)>2;查詢將XS_KC表中成績大于或等于80的記錄按學(xué)號分組,對每組記錄計數(shù),選出記錄數(shù)大于2的各組的學(xué)號值形成結(jié)果表?!纠?.45】查找通信工程專業(yè)平均成績在85分以上的學(xué)生的學(xué)號和平均成績。SELECTXHAS學(xué)號,AVG(CJ)AS平均成績 FROMXS_KC WHEREXHIN (SELECTXH FROMXS WHEREZYM='通信工程') GROUPBYXH HAVINGAVG(CJ)>=85;?4.2.6排序在應(yīng)用中經(jīng)常要對查詢的結(jié)果排序輸出,例如學(xué)生成績由高到低排序。在SELECT語句中,使用ORDERBY子句對查詢結(jié)果進(jìn)行排序。ORDERBY子句的格式為:[ORDERBY{order_by_expression[ASC|DESC]}[,…n]其中order_by_expression是排序表達(dá)式,可以是列名、表達(dá)式或一個正整數(shù),當(dāng)expression是一個正整數(shù)時,表示按表中的該位置上列排序。關(guān)鍵字ASC表示升序排列,DESC表示降序排列,系統(tǒng)默認(rèn)值為ASC?!纠?.46】將通信工程專業(yè)的學(xué)生按出生時間先后排序。SELECT* FROMXS WHEREZYM='通信工程' ORDERBYCSSJ;?4.2.6排序【例4.47】將計算機(jī)專業(yè)學(xué)生的“計算機(jī)基礎(chǔ)”課程成績按降序排列。SELECTXMAS姓名,KCMAS課程名,CJAS成績FROMXS,KC,XS_KC WHEREXS.XH=XS_KC.XHANDXS_KC.KCH=KC.KCHANDKCM='計算機(jī)基礎(chǔ)'ANDZYM='計算機(jī)' ORDERBYCJDESC;執(zhí)行的結(jié)果為:姓名 課程名 成績張蔚 計算機(jī)基礎(chǔ) 95趙琳 計算機(jī)基礎(chǔ) 91韋嚴(yán)平 計算機(jī)基礎(chǔ) 90林一帆 計算機(jī)基礎(chǔ) 85王林 計算機(jī)基礎(chǔ) 80李明 計算機(jī)基礎(chǔ) 78張強(qiáng)民 計算機(jī)基礎(chǔ) 66李方方 計算機(jī)基礎(chǔ) 65嚴(yán)紅 計算機(jī)基礎(chǔ) 63王燕 計算機(jī)基礎(chǔ) 62?4.2.7SELECT語句的UNION子句使用UNION子句可以將兩個或多個SELECT查詢的結(jié)果合并成一個結(jié)果集,其格式為: {<queryspecification>|(<queryexpression>)} UNION[ALL]<queryspecification>|(<queryexpression>) [UNION[ALL]<queryspecification>|(<queryexpression>)[…n]]其中queryspecification和queryexpression都是SELECT查詢語句。使用UNION組合兩個查詢的結(jié)果集的基本規(guī)則是:(1)所有查詢中的列數(shù)和列的順序必須相同。(2)數(shù)據(jù)類型必須兼容。關(guān)鍵字ALL表示合并的結(jié)果中包括所有行,不去除重復(fù)行。不使用ALL則在合并的結(jié)果去除重復(fù)行。含有UNION的SELECT查詢也稱為聯(lián)合查詢。?4.2.7SELECT語句的UNION子句【例4.48】設(shè)在XSCJ數(shù)據(jù)庫中建兩個表:數(shù)學(xué)系學(xué)生、外語系學(xué)生,表結(jié)構(gòu)與XS表相同,兩個表分別存儲數(shù)學(xué)系和外語系的學(xué)生情況,下列語句將這兩個表的數(shù)據(jù)合并到XS表中。SELECT* FROMXS UNIONALL SELECT* FROM數(shù)學(xué)系學(xué)生 UNIONALL SELECT* FROM外語系學(xué)生;UNION操作常用于歸并數(shù)據(jù),例如歸并月報表形成年報表,歸并各部門數(shù)據(jù)等。注意UNION還可以與GROUPBY及ORDERBY一起使用,用來對合并所得的結(jié)果表進(jìn)行分組或排序。?4.3數(shù)據(jù)庫的視圖4.3.1視圖的概念視圖是從一個或多個表(或視圖)導(dǎo)出的表。視圖與表(有時為與視圖區(qū)別,也稱表為基表——BaseTable)不同,視圖是一個虛表,即視圖所對應(yīng)的數(shù)據(jù)不進(jìn)行實(shí)際存儲,數(shù)據(jù)庫中只存儲視圖的定義,對視圖的數(shù)據(jù)進(jìn)行操作時,系統(tǒng)根據(jù)視圖的定義去操作與視圖相關(guān)聯(lián)的基表。視圖可以由以下任意一項(xiàng)組成:(1) 一個基表的任意子集(2) 兩個或者兩個以上基表的合集(3) 兩個或者兩個以上基表的交集(4) 對一個或者多個基表運(yùn)算的結(jié)果集合另一個視圖的子集?4.3.1視圖的概念視圖一經(jīng)定義以后,就可以象表一樣被查詢、修改、刪除和更新。使用視圖有下列優(yōu)點(diǎn):(1) 為用戶集中數(shù)據(jù),簡化用戶的數(shù)據(jù)查詢和處理。(2) 屏蔽數(shù)據(jù)庫的復(fù)雜性。(3) 簡化用戶權(quán)限的管理。(4) 便于數(shù)據(jù)共享。(5)可以重新組織數(shù)據(jù)以便輸出到其它應(yīng)用程序中。?4.3.2創(chuàng)建視圖1.用OEM創(chuàng)建視圖以在XSCJ數(shù)據(jù)庫中創(chuàng)建CS_XS(描述計算機(jī)專業(yè)學(xué)生情況)視圖說明創(chuàng)建視圖的過程。(1)在如圖4.6所示的界面中,選擇單擊視圖進(jìn)入“視圖搜索”界面,如圖4.7所示。在該界面選擇對象類型,并可以選擇輸入方案名稱和對象名稱,單擊“開始”按鈕,查找滿足條件的對象類型,若存在滿足條件的對象類型,在結(jié)果項(xiàng)可以查找到的對象類型。圖4.6Oracle企業(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)建界面有三個選項(xiàng)頁面:一般信息、選項(xiàng)和對象選項(xiàng)頁面。一般信息頁面如圖4.8所示,主要定義視圖的基本信息,如名稱、所屬用戶方案等。選項(xiàng)(如圖4.9所示)和對象選項(xiàng)卡(如圖4.10所示),定義視圖的一些高級選項(xiàng),如視圖是否只讀、約束條件等。

圖4.9選項(xiàng)選項(xiàng)界面

圖4.10對象選項(xiàng)界面?4.3.2創(chuàng)建視圖1. 用OEM創(chuàng)建視圖一般信息頁面:在“名稱”文本框輸入視圖名稱CS_XS;用戶方案選ADMIN;在“查詢文本”中輸入創(chuàng)建視圖的SQL語句,如圖4.8所示的SQL語句。如果有同名視圖存在,若選中“若存在則替換”復(fù)選框,那么將用現(xiàn)在定義的視圖代替原有同名的視圖;否則系統(tǒng)將提示錯誤信息“視圖已存在”,要求重新命名。在別名文本框可以為視圖定義別名。選項(xiàng)選項(xiàng)頁面:若選中“強(qiáng)制”選項(xiàng),則指定創(chuàng)建視圖而無須考慮視圖基表是否存在或包含該視圖的方案所有者是否具有權(quán)限。只有選中“限制”復(fù)選框后才能設(shè)置只讀或是否具有約束條件?!爸蛔x”單選項(xiàng)規(guī)定視圖中不能執(zhí)行刪除、插入、更新操作,只能檢索數(shù)據(jù)。“帶有復(fù)選選項(xiàng)”指定在視圖中執(zhí)行插入和更新操作時,必須能使該視圖查詢可以選擇這些數(shù)據(jù),但如果視圖的查詢中包含子查詢或該視圖是基于其它視圖的,這項(xiàng)指定不一定生效?!凹s束條件”是指定分配給“復(fù)選選項(xiàng)”約束條件的名稱。對象選項(xiàng)頁面:該選項(xiàng)頁面僅用于對象視圖。如果您處理的不是對象視圖,則可跳過此選項(xiàng)卡。如果想創(chuàng)建對象視圖,則要選中“作為對象視圖”復(fù)選框,選擇對象類型,然后選擇默認(rèn)屬性或是選擇可用屬性列表列出的對象屬性。(6) 單擊“確定”,系統(tǒng)執(zhí)行創(chuàng)建視圖操作完成后返回如圖4.7所示界面。?4.3.2創(chuàng)建視圖2. 使用CREATEVIEW語句創(chuàng)建視圖PL/SQL中用于創(chuàng)建視圖的語句是CREATEORREPLACEVIEW語句。語法格式: CREATE[ORREPLACE][FORCE|NOFORCE]VIEW[schema.]view_name [(column_name[,…n])] ASselect_statement [WITHCHECKOPTION[CONSTRAINTconstraint_name]] [WITHREADONLY]【例4.49】創(chuàng)建CS_KC視圖,包括計算機(jī)專業(yè)各學(xué)生的學(xué)號、其選修的課程號及成績。要保證對該視圖的修改都要符合專業(yè)名為計算機(jī)這個條件。CREATEORREPLACEVIEWCS_KC AS SELECTXS.XH,KCH,CJ FROMXS,XS_KC WHEREXS.XH=XS_KC.XHANDZYM='計算機(jī)' WITHCHECKOPTION;?4.3.2創(chuàng)建視圖【例4.50】創(chuàng)建計算機(jī)專業(yè)學(xué)生的平均成績視圖CS_KC_AVG,包括學(xué)號(在視圖中列名為num)和平均成績(在視圖中列名為score_avg)。CREATEORREPLACEVIEWCS_KC_AVG(num,score_avg) AS SELECTXH,AVG(CJ) FROMXS_KC GROUPBYXH;?4.3.3查詢視圖1. SELECT語句查詢視圖【例4.51】查找計算機(jī)專業(yè)的學(xué)生學(xué)號和選修的課程號。SELECTXH,KCH FROMCS_KC;【例4.52】查找平均成績在80分以上的學(xué)生的學(xué)號和平均成績。本例首先創(chuàng)建學(xué)生平均成績視圖XS_KC_AVG,包括學(xué)號(在視圖中列名為num)和平均成績(在視圖中列名為score_avg)。CREATEORREPLACEVIEWXS_KC_AVG(num,score_avg)AS SELECTXH,AVG(CJ)FROMXS_KCGROUPBYXH;再對XS_KC_AVG視圖進(jìn)行查詢。SELECT* FROMXS_KC_AVG WHEREscore_avg>=80;?4.3.3查詢視圖【例4.52】查找平均成績在80分以上的學(xué)生的學(xué)號和平均成績。執(zhí)行結(jié)果為:numscore_avg061110 9106120180061203 87061204 91061216 81061220 82061241 90?4.3.4更新視圖通過更新視圖(包括插入、修改和刪除)數(shù)據(jù)可以修改基表數(shù)據(jù)。但并不是所有的視圖都可以更新,只有對滿足可更新條件的視圖,才能進(jìn)行更新。1. 可更新視圖要通過視圖更新基表數(shù)據(jù),必須保證視圖是可更新視圖。一個可更新視圖滿足以下條件:(1) 沒有使用連接函數(shù)、集合運(yùn)算函數(shù)和組函數(shù);(2) 創(chuàng)建視圖的SELECT語句中沒有聚合函數(shù)且沒有GROUPBY、ONNECTBY、STARTWITH子句及DISTINCT關(guān)鍵字;(3) 創(chuàng)建視圖的SELECT語句中不包含從基表列通過計算所得的列;(4) 創(chuàng)建視圖沒有包含只讀屬性。【例4.53】在XSCJ數(shù)據(jù)庫中使用以下語句創(chuàng)建可更新視圖CS_XS1。CREATEORREPLACEVIEWCS_XS1 AS SELECT* FROMXS WHEREZYM='計算機(jī)';?4.3.4更新視圖2. 插入數(shù)據(jù)使用INSERT語句通過視圖向基本表插入數(shù)據(jù)。【例4.54】向CS_XS1視圖中插入一條記錄:(‘001115’,‘劉明儀’,‘計算機(jī)’,男,‘1984-3-2’,50,‘三好學(xué)生’)INSERTINTOCS_XS1VALUES('001115','劉明儀','計算機(jī)',’男’,TO_DATE(‘19840302’,’YYYYMMDD’),50,‘三好學(xué)生’);使用SELECT語句查詢CS_XS1依據(jù)的基本表XS:SELECT*FROMXS;將會看到該表已添加了學(xué)號為001115的數(shù)據(jù)行。?4.3.4更新視圖3. 修改數(shù)據(jù)使用UPDATE語句可以通過視圖修改基本表的數(shù)據(jù)。【例4.55】將CS_XS視圖中所有學(xué)生的總學(xué)分增加8。UPDATECS_XS SET總學(xué)分=總學(xué)分+8;該語句實(shí)際上是將CS_XS視圖所依賴的基本表XS中所有專業(yè)名為“計算機(jī)”的記錄的總學(xué)分字段值在原來基礎(chǔ)上增加8。若一個視圖依賴于多個基本表,則一次修改該視圖只能變動一個基本表的數(shù)據(jù)?!纠?.56】將CS_KC視圖中學(xué)號為001101的學(xué)生的101課程成績改為90。UPDATECS_KC SETCJ=90 WHEREXH='001101'ANDKCH='101';?4.3.4更新視圖4. 刪除數(shù)據(jù)使用DELETE語句可以通過視圖刪除基本表的數(shù)據(jù)。但要注意,對于依賴于多個基本表的視圖,不能使用DELETE語句。例如,不能通過對CS_KC視圖執(zhí)行DELETE語句而刪除與之相關(guān)的基本表XS及XS_KC表的數(shù)據(jù)?!纠?.57】刪除CS_XS中女同學(xué)的記錄。DELETEFROMCS_XS WHEREXB=’女’;?4.3.5修改視圖的定義修改視圖定義可以通過OEM的界面進(jìn)行,也可使用PL/SQL語句。1. 通過OEM修改視圖在如圖4.11所示的窗口中,在一般信息選項(xiàng)卡中,對視圖定義進(jìn)行修改。在選項(xiàng)和對象選項(xiàng)卡中,修改指定選項(xiàng)或?qū)σ晥D的約束條件等。修改完畢后單擊“應(yīng)用”按鈕即可。圖4.11修改視圖定義?4.3.5修改視圖的定義2. 使用SQL命令修改視圖Oracle提供了ALTERVIEW語句,但它不是用于修改視圖定義,只是用于重新編譯或驗(yàn)證現(xiàn)有視圖?!纠?.58】修改視圖CS_KC的定義,包括學(xué)號、姓名、選修的課程號、課程名和成績。 CREATEORREPLACEFORCEVIEWCS_KC AS SELECTXS.XH,XS.XM,XS_KC.KCH,KC.KCM,CJ FROMXS,XS_KC,KC WHEREXS.XH=XS_KC.XHANDXS_KC.KCH=KC.KCHANDZYM=’通信工程’ WITHCHECKOPTION;?4.3.6刪除視圖如果不再需要視圖了,可以通過OEM和PL/SQL語句兩種方式,把視圖的定義從數(shù)據(jù)庫中刪除。刪除一個視圖,就是刪除其定義和賦予的全部權(quán)限。在如圖4.12界面中,選中要刪除的視圖,單擊“刪除”,出現(xiàn)確認(rèn)界面,單擊“是”按鈕即可刪除所選擇的視圖。圖4.12刪除視圖?4.3.6刪除視圖刪除視圖的PL/SQL語句是DROPVIEW,格式為: DROPVIEW[schema.]view_name其中schema是所要刪除視圖的用戶方案;view_name是視圖名。例如: DROPVIEWCS_KC;將刪除視圖CS_KC。?4.4格式化輸出結(jié)果4.4.1替換變量在SQL*Plus環(huán)境中,可以使用替換變量來臨時存儲有關(guān)的數(shù)據(jù)。Oracle使用3種類型的替換變量。1. &替換變量在SELECT語句中,如果某個變量前面使用了&符號,那么表示該變量是一個替換變量。在執(zhí)行SELECT語句時,系統(tǒng)會提示用戶為該變量提供一個具體的值?!纠?.59】查詢XSCJ數(shù)據(jù)庫XS表計算機(jī)專業(yè)的同學(xué)情況。 SELECTXHAS學(xué)號,XMAS姓名 FROMXS WHEREZYM=&specialty_name;?4.4.1替換變量1. &替換變量【例4.60】查找平均成績在80分以上的學(xué)生的學(xué)號、姓名和平均成績。SETVERIFYONSELECT* FROMXS_KC_AVG WHEREscore_avg>=score_avg;執(zhí)行過程為:輸入score_avg的值:80原值 3:WHEREscore_avg>=score_avg新值 3:WHEREscore_avg>=80替換變量不僅僅可以用在WHERE子句中,而且還可以用在下列部分:(1) ORDERBY子句。(2) 列表達(dá)式。(3) 表名。(4) 整個SELECT語句?4.4.1替換變量1. &替換變量【例4.61】查找選修了“離散數(shù)學(xué)”課程的學(xué)生學(xué)號、姓名、課程名及成績。 SELECTXS.XH,&name,KCM,&column FROMXS,&kc,XS_KC WHEREXS.XH=XS_KC.XHAND&condition ANDKCM=&kcmORDERBY&column;執(zhí)行過程及結(jié)果為:輸入name的值:XM輸入column的值:CJ原值1:SELECTXS.XH,&name,KCM,&column新值1:SELECTXS.XH,XM,KCM,CJ原值2:FROMXS,&kc,XS_KC新值2:FROMXS,kc,XS_KC輸入condition的值:KC.KCH=XS_KC.KCH輸入kcm的值:‘離散數(shù)學(xué)’原值3:WHEREXS.XH=XS_KC.XHAND&conditionANDKCM=&kcm新值3:WHEREXS.XH=XS_KC.XHANDKC.KCH=XS_KC.KCHANDKCM=’離散數(shù)學(xué)’?4.4.1替換變量輸入column的值:CJ原值4:ORDERBY&column新值4:ORDERBYCJXHXMKCMCJ061113嚴(yán)紅離散數(shù)學(xué)60061104韋嚴(yán)平離散數(shù)學(xué)65061107李明離散數(shù)學(xué)68061109張強(qiáng)民離散數(shù)學(xué)70061101王林離散數(shù)學(xué)71061111趙琳離散數(shù)學(xué)76061102程明離散數(shù)學(xué)78061106李方方離散數(shù)學(xué)80061103王燕離散數(shù)學(xué)81061108林一帆離散數(shù)學(xué)87061110張蔚離散數(shù)學(xué)89?4.4.1替換變量2. &&替換變量在SELECT語句中,如果希望重新使用某個變量并且不希望重新提示輸入該值,可以使用&&替換變量。在上述例子中,包含了一個變量&column,這個變量出現(xiàn)了兩次,如果只是使用“&”符號來定義替換變量,那么系統(tǒng)會提示用戶輸入兩次該變量。在此,為該變量提供了列名CJ?!纠?.62】查找選修了“離散數(shù)學(xué)”課程的學(xué)生學(xué)號、姓名、課程名及成績。執(zhí)行過程和結(jié)果為:輸入name的值:XM輸入column的值:CJ原值1:SELECTXS.XH,&name,KCM,&column新值1:SELECTXS.XH,XM,KCM,CJ原值2:FROMXS,&kc,XS_KC新值2:FROMXS,kc,XS_KC輸入condition的值:KC.KCH=XS_KC.KCH輸入kcm的值:'離散數(shù)學(xué)'原值3:WHEREXS.XH=XS_KC.XHAND&conditionANDKCM=&kcm新值3:WHEREXS.XH=XS_KC.XHANDKC.KCH=XS_KC.KCHANDKCM='離散數(shù)學(xué)'?4.4.1替換變量輸入column的值:NAME原值4:ORDERBY&column新值4:ORDERBYNAMEXHXMKCMCJ061102程明離散數(shù)學(xué)78061106李方方離散數(shù)學(xué)80061107李明離散數(shù)學(xué)68061108林一帆離散數(shù)學(xué)87061101王林離散數(shù)學(xué)71061103王燕離散數(shù)學(xué)81061104韋嚴(yán)平離散數(shù)學(xué)65061113嚴(yán)紅離散數(shù)學(xué)60061109張強(qiáng)民離散數(shù)學(xué)70061110張蔚離散數(shù)學(xué)89061111趙琳離散數(shù)學(xué)76?4.4.1替換變量【例4.63】查詢選修課程超過2門且成績在75分以上的學(xué)生的學(xué)號。 SELECT&&column FROMXS_KC WHERECJ>=75 GROUPBY&column HAVINGCOUNT(*)>2;執(zhí)行過程:輸入column的值:XH原值1:

溫馨提示

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

最新文檔

評論

0/150

提交評論