SQL-Server-2005數(shù)據(jù)庫原理及應(yīng)用教程第4章-關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言--SQL_第1頁
SQL-Server-2005數(shù)據(jù)庫原理及應(yīng)用教程第4章-關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言--SQL_第2頁
SQL-Server-2005數(shù)據(jù)庫原理及應(yīng)用教程第4章-關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言--SQL_第3頁
SQL-Server-2005數(shù)據(jù)庫原理及應(yīng)用教程第4章-關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言--SQL_第4頁
SQL-Server-2005數(shù)據(jù)庫原理及應(yīng)用教程第4章-關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言--SQL_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第4章關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言

——SQL

4.1SQL概述

4.1.1SQL語言的特點(diǎn) SQL語言之所以能夠得到廣泛的應(yīng)用,并成為國際上的數(shù)據(jù)庫主流語言,是因?yàn)樗且粋€(gè)綜合的、功能強(qiáng)大的、易學(xué)易用的語言。主要特點(diǎn)包括以下幾個(gè)方面。1.綜合統(tǒng)一2.高度非過程化3.面向集合的操作方式4.兩種使用方式,統(tǒng)一的語法結(jié)構(gòu)5.語言簡潔、易學(xué)易用4.1.2SQL數(shù)據(jù)庫的三級(jí)模式結(jié)構(gòu)SQL語言支持關(guān)系數(shù)據(jù)庫的三級(jí)模式結(jié)構(gòu),其中視圖對(duì)應(yīng)外模式,基本表對(duì)應(yīng)模式,存儲(chǔ)文件對(duì)應(yīng)內(nèi)模式。①用戶可以對(duì)視圖(View)和基本表(BaseTable)進(jìn)行查詢等操作。②視圖是從一個(gè)或幾個(gè)基本表導(dǎo)出的表,它本身不獨(dú)立存儲(chǔ)在數(shù)據(jù)庫中,即數(shù)據(jù)庫中只存儲(chǔ)視圖的定義,不存儲(chǔ)對(duì)應(yīng)的數(shù)據(jù)。因此視圖是一張?zhí)摂M表。③基本表是本身獨(dú)立存在的表,每個(gè)基本表都有與之對(duì)應(yīng)的存儲(chǔ)文件。一個(gè)基本表可以跨越若干個(gè)存儲(chǔ)文件,一個(gè)存儲(chǔ)文件也可以存放若干個(gè)基本表。④SQL用戶可以是應(yīng)用程序,也可以是最終用戶。SQL用戶也可以作為獨(dú)立的用戶接口,供交互環(huán)境下的終端用戶使用。4.2SQL的數(shù)據(jù)定義

SQL語言的數(shù)據(jù)定義(DDL)功能包括:定義基本表、定義視圖和定義索引。4.2.1基本表的定義在SQL中基本表的定義功能包括基本表的創(chuàng)建、修改和刪除三種語句。1.基本表的創(chuàng)建SQL語言使用CREATETABLE語句創(chuàng)建基本表,格式為:CREATETABLE<表名>(<列名><數(shù)據(jù)類型>[列級(jí)完整性約束條件][,<列名><數(shù)據(jù)類型>[列級(jí)完整性約束條件]]…[,<表級(jí)完整性約束條件>]);其中,<表名>表示所要?jiǎng)?chuàng)建的基本表的名稱,<列名>為表中屬性的名稱,可用英文也可用漢字。每個(gè)屬性都有數(shù)據(jù)類型,不同的關(guān)系數(shù)據(jù)庫系統(tǒng)所支持的數(shù)據(jù)類型存在部分差異,但一般都支持表4-3所列的一些主要數(shù)據(jù)類型。建表的時(shí)候還可以同時(shí)定義與該表有關(guān)的完整性約束條件,包括表級(jí)完整性約束條件與列級(jí)完整性約束條件。列級(jí)完整性約束條件是針對(duì)屬性值設(shè)置的限制條件,SQL的列級(jí)完整性約束條件有以下幾種。1)NULL或NOTNULL約束2)UNIQUE約束3)DEFAULT約束4)CHECK約束表級(jí)完整性約束條件是指涉及到關(guān)系中兩列或兩列以上的限制條件。SQL的表級(jí)完整性約束條件有以下幾種。1)UNIQUE約束2)PRIMARYKEY約束3)FOREIGNKEY約束2.基本表的修改在數(shù)據(jù)庫的實(shí)際應(yīng)用中,隨著應(yīng)用環(huán)境和需求的變化,經(jīng)常需要修改基本表的結(jié)構(gòu),包括修改屬性列的寬度和數(shù)據(jù)類型,增加新的屬性,增加新的約束條件,刪除原有的約束條件等。SQL語言使用ALTERTABLE語句修改基本表,一般格式為:ALTERTABLE<表名>[ADD<新列名><數(shù)據(jù)類型>[完整性約束條件]][DROP<完整性約束名>][MODIFY<列名><數(shù)據(jù)類型>];其中,<表名>是已經(jīng)存在且要修改的表。ADD子句用于增加新列,但新屬性不能定義為NOTNULL,因?yàn)楸碓谛略黾右涣泻?,原來的原組在新增的列上的值都為空值。DROP子句用于刪除指定的完整性約束條件。MODIFY子句用于修改原有的列名和數(shù)據(jù)類型,修改表中原有的列的定義可能會(huì)破壞原有的數(shù)據(jù)。3.基本表的刪除當(dāng)不再需要某個(gè)基本表時(shí),可以使用DROPTABLE語句刪除它。刪除基本表語句的一般格式為:DROPTABLE<表名>;該語句將一個(gè)基表的定義,連同表中的所有數(shù)據(jù)記錄、索引以及由此表導(dǎo)出的所有視圖全部刪除,并釋放相應(yīng)的存儲(chǔ)空間。4.3SQL的數(shù)據(jù)查詢SQL數(shù)據(jù)查詢是SQL語言中最重要、最豐富,也是最靈活的內(nèi)容。SQL語言中提供了SELECT語句進(jìn)行數(shù)據(jù)庫的查詢,它具有數(shù)據(jù)查詢、統(tǒng)計(jì)、分組和排序的功能。一般格式為:SELECT[ALL|DISTINCT]<目標(biāo)列表達(dá)式>[,<目標(biāo)列表達(dá)式>]…FROM<表名或視圖名>[,<表名或視圖名>]…[WHERE<條件表達(dá)式>][GROUPBY<列名1>[HAVING<條件表達(dá)式>]][ORDERBY<列名2>[ASC|DESC]];①SQL查詢中的子句順序:SELECT,F(xiàn)ROM,WHERE,GROUPBY,HAVING和ORDERBY。其中SELECT和FROM是必須的,而HAVING子句只能和GROUPBY子句搭配起來使用。②SELECT子句對(duì)應(yīng)的是關(guān)系代數(shù)中的投影運(yùn)算,用來列出查詢結(jié)果中的屬性。其輸出可以是列名、表達(dá)式或集函數(shù)(AVG,COUNT,MAX,MIN和SUM)。DISTINCT選項(xiàng)可以保證查詢結(jié)果集中不存在重復(fù)元組。③FROM子句對(duì)應(yīng)的是關(guān)系代數(shù)中的笛卡兒積,它列出的是表達(dá)式求值過程中必須掃描的關(guān)系。在FROM子句出現(xiàn)多個(gè)基本表或視圖時(shí),系統(tǒng)首先執(zhí)行笛卡兒積操作。④WHERE子句對(duì)應(yīng)的是關(guān)系代數(shù)中的選擇謂詞。WHERE子句的條件表達(dá)式中常用的查詢條件如下4.3.1簡單查詢簡單查詢是指在查詢過程中只涉及一個(gè)基本表或視圖的查詢,它是一種最簡單的查詢。1.最簡單的查詢最簡單的查詢是指查詢一張表,并且只有SELECT子句和FROM子句,沒有WHERE子句,表示被查詢的對(duì)象是關(guān)系中的所有元組。例4-12

SELECT(Pno,Pname,Pcity,Ptelephone)FROMProvider;在這里,當(dāng)查詢列的顯示順序與其在基本表中順序相同時(shí),也可以簡單地將<目標(biāo)列表達(dá)式>指定為*。因此上面的語句等價(jià)于:SELECT*FROMProvider;2.DISTINCT短語按照關(guān)系的一般理論,重復(fù)的元組是不會(huì)出現(xiàn)在關(guān)系中的。但是,重復(fù)元組的刪除是相當(dāng)費(fèi)時(shí)的,所以SQL允許在關(guān)系和查詢中出現(xiàn)重復(fù)。在SELECT語句中缺省或ALL是保留重復(fù)元組的,因此一般情況下不寫ALL。如果想要?jiǎng)h除重復(fù),則必須使用DISTINCT短語。重復(fù)元組一般是在投影的時(shí)候產(chǎn)生的。例4-14查詢供應(yīng)商所在城市。SELECTPcityFROMProvider;3.表達(dá)式的查詢SELECT子句可以包含算術(shù)表達(dá)式、字符串常量和函數(shù)等。例4-15查詢所有工程的工程名和首付款(預(yù)算的50%)。SELECTProjectname,首付款,Budget*0.5首付FROMProject;4.WHERE子句WHERE子句的作用是選擇滿足條件的元組。1)比較運(yùn)算SQL提供的比較運(yùn)算符主要有:=、<>、!=、<、<=、>、>=,以及BETWEEN…AND…。SQL允許使用比較運(yùn)算符、比較算術(shù)表達(dá)式和字符串等特殊類型數(shù)據(jù)(如日期)等。例4-16查詢天津市供應(yīng)商的名稱和聯(lián)系電話。SELECTPname,PtelephoneFORMProviderWHEREPcity='天津';2)邏輯運(yùn)算SQL在WHERE子句中可以使用邏輯運(yùn)算符AND,OR和NOT,邏輯運(yùn)算的對(duì)象是包含比較運(yùn)算符的表達(dá)式。例4-19查詢供應(yīng)數(shù)量在5000-10000之間的供應(yīng)商代碼。SELECTPnoFROMSupplyWHEREAccount>=5000ANDAccount<=10000;3)謂詞ININ表示查找的條件包含在集合中。NOTIN表示查找的條件不包含在集合中。例4-21查詢天津和北京的供應(yīng)商信息。SELECT*FROMProviderWHEREPcityIN('天津','北京');4)字符串操作字符串也可以進(jìn)行比較運(yùn)算。若兩個(gè)字符串具有相同的字符序列,則這兩個(gè)字符串是相等的。當(dāng)對(duì)兩個(gè)字符串用“小于或大于”比較時(shí),實(shí)際上是對(duì)這兩個(gè)字符串按字母順序依次進(jìn)行字母大小比較,例如'FHGE'>'FHFF'SQL還提供了使用操作符LIKE的模式匹配的字符串比較功能,勝于查找指定的屬性列值與<匹配串>相匹配的原組。:[NOT]LIKE'<匹配串>'[ESCAPE'<換碼字符>']例4-22查詢所有綠色的零件的信息。SELECT*FROMAccessoryWHEREAcolorLIKE'綠';5)ORDERBY子句在查詢中,經(jīng)常要求將查詢結(jié)果按照某種規(guī)則進(jìn)行排序。SQL通過在查詢基本結(jié)構(gòu)中加入ORDERBY子句實(shí)現(xiàn)對(duì)查詢結(jié)果按一個(gè)或多個(gè)列排序,格式為:ORDERBY列名1[ASC|DESC],列名2[ASC|DESC],…列名n[ASC|DESC];ASC代表的是升序,DESC代表的是降序,默認(rèn)是升序,ASC可以省略。例4-28查詢使用了“零件編號(hào)”為0043的“項(xiàng)目編號(hào)”及“供應(yīng)數(shù)量”,并將查詢結(jié)果按“項(xiàng)目編號(hào)”升序排列,同一個(gè)項(xiàng)目按“供應(yīng)數(shù)量”降序排列。SELECTProjectno,AccountFROMSupplyWHEREAno='0043'ORDERBYProjectno,AccountDESC;6)使用集函數(shù)為了方便用戶,增強(qiáng)檢索功能,SQL提供了許多集函數(shù)例4-29查詢供銷商的個(gè)數(shù)。SELECTCOUNT(*)FROMProvider;例4-30查詢?yōu)轫?xiàng)目供應(yīng)了零件的供應(yīng)商的個(gè)數(shù)。SELECTCOUNT(DISTINCTPno)FROMSupply;供應(yīng)商為一個(gè)項(xiàng)目供應(yīng)了一種零件,在Supply表中就有一條記錄。一個(gè)供應(yīng)商要供應(yīng)多個(gè)項(xiàng)目多種零件,為避免重復(fù)計(jì)算供應(yīng)商個(gè)數(shù),必須在COUNT函數(shù)中使用DISTINCT短語。4.3.2連接查詢

連接查詢是指涉及兩個(gè)或兩個(gè)以上的基本表或視圖的連接操作而實(shí)現(xiàn)的查詢。連接查詢包括等值連接、自然連接、求笛卡爾積、一般連接、外連接、內(nèi)連接、左連接、右連接和自然連接等多種。1.等值連接和非等值連接查詢連接查詢中,用來連接兩個(gè)表的條件稱為連接條件或連接謂詞。連接條件的一般格式為:[<表名1>.]<列名1><比較運(yùn)算符>[<表名2>.]<列名2>其中,比較運(yùn)算符主要有:=、>、<、>=、<=和!=。連接謂詞中的列名稱為連接字段。連接條件中,連接字段類型必須是可比的,但連接字段不一定是同名的。當(dāng)連接運(yùn)算符為“=”時(shí),該連接操作稱為等值連接;否則,使用其他運(yùn)算符的連接運(yùn)算稱為非等值連接。當(dāng)?shù)戎颠B接中的連接字段相同,并且在SELECT語句中去除了重復(fù)字段時(shí),該連接操作為自然連接。例4-35查詢供應(yīng)商的情況及其所供應(yīng)的項(xiàng)目和零件。SELECTProvider.*,Supply.*FROMSupply,ProviderWHERESupply.Pno=Provider.Pno;說明:①該題的目標(biāo)列中含供應(yīng)商表的全部屬性和供應(yīng)零件表的全部屬性;②由于目標(biāo)列中有供應(yīng)商表中的供應(yīng)商編號(hào)和供應(yīng)零件表中的供應(yīng)商編號(hào)兩個(gè)相同屬性名的屬性,故它的連接操作是等值連接,如果在SELECT語句中將重復(fù)屬性去掉,該操作即為自然連接操作;③連接操作的連接條件必須在WHERE子句中寫出,如果使用了兩個(gè)表查詢,但WHERE子句中無連接條件,則結(jié)果為廣義笛卡爾積操作結(jié)果。2.自身連接查詢連接操作不只是在兩個(gè)表之間進(jìn)行,一個(gè)表也可以進(jìn)行自身連接操作。表自身的連接操作稱為自身連接。例4-38查詢所有與“0065”零件顏色相同的零件名稱。SELECTB.AnameFROMAccessoryA,AccessoryBWHEREA.Ano='0065'ANDAcolor=B.Acolor;說明:①自身連接實(shí)際上是將一個(gè)表作為兩個(gè)表來處理,為了對(duì)它們進(jìn)行區(qū)分,在查詢語句中需要使用表的別名,在本例中的A和B分別是Accessory表的別名,A和B分別作為獨(dú)立表使用;②該題的連接條件是A表中的顏色與B表中的顏色等值連接,由于A和B都是零件的別名,所以該例是自然連接操作;③數(shù)據(jù)庫系統(tǒng)在執(zhí)行本例的自然連接操作時(shí),首先按別名形成兩個(gè)獨(dú)立的表A和B,然后根據(jù)要求連接成結(jié)果表;3.外部連接查詢?cè)谇懊娴倪B接示例中,結(jié)果集中只保留了符合連接條件的元組,而去除了兩個(gè)表中沒有對(duì)應(yīng)的或匹配的元組情況,這種連接稱為內(nèi)連接。如果要求查詢結(jié)果集中保留非匹配的元組,這就是外部連接操作。SQL的外部連接分為左連接和右連接兩種:左連接是在結(jié)果集中保留連接表達(dá)式左集中的非匹配記錄;右連接是在結(jié)果集中保留連接表達(dá)式右集中的非匹配記錄。左連接符號(hào)為“*=”,右連接符號(hào)為“=*”。外部連接中不匹配的分量在結(jié)果集中使用NULL表示。可以將例4-35改寫為:SELECTProvider.*,Supply.*FROMSupply,ProviderWHERESupply.Pno=*Provider.Pno;或SELECTProvider.*,Supply.*FROMSupply,ProviderWHEREProvider.Pno*=Supply.Pno;4.3.3嵌套查詢?cè)赟QL語言中,一個(gè)SELECT…FROM…WHERE語句稱為一個(gè)查詢塊。將一個(gè)查詢塊嵌套在另一個(gè)查詢塊的WHERE子句或HAVING短語的條件中的查詢稱為嵌套查詢。在嵌套語句中,上層的查詢塊稱為外層查詢或父查詢,下層查詢塊稱為內(nèi)層查詢或子查詢。SQL語言允許多層嵌套查詢,即一個(gè)子查詢中還可以嵌套其他子查詢。需要特別注意的是,子查詢的SELECT語句中不能使用ORDERBY子句,ORDERBY子句只能對(duì)最終查詢結(jié)果排序。嵌套查詢一般的處理方法是由里向外處理,即每個(gè)子查詢?cè)谏弦患?jí)查詢處理之前處理,子查詢的結(jié)果用于建立起父查詢的查找條件。1.使用IN操作符的嵌套查詢?cè)谇短撞樵冎校硬樵兊慕Y(jié)果往往是一個(gè)集合,所以謂詞IN是嵌套查詢中最經(jīng)常使用的謂詞。例4-39查詢使用了零件“螺釘”的項(xiàng)目編號(hào)和名稱。SELECTProjectno,ProjectnameFROMProjectWHEREProjectnoIN(SELECTProjectnoFROMSupply WHEREAnoIN(SELECTAno FROMAccessory WHEREAname='螺釘'));該題的執(zhí)行步驟是,首先在零件表中查詢出螺釘?shù)牧慵幪?hào)(可能為多個(gè)),然后根據(jù)這個(gè)(些)零件編號(hào)在項(xiàng)目表中找出項(xiàng)目編號(hào),最后根據(jù)項(xiàng)目編號(hào)在項(xiàng)目表中找出其名稱;2.使用比較運(yùn)算符的嵌套查詢IN操作符用于一個(gè)值與多個(gè)值的比較,而比較符用于一個(gè)值與另一個(gè)值之間的比較。當(dāng)比較運(yùn)算符后面的值需要通過查詢才能得到的,就需要使用比較符嵌套查詢。例4-40查詢?cè)凇?01”工程中比“2948”零件供應(yīng)量大的零件編號(hào)。SELECTAnoFROMSupplyWHEREProjectno='001'ANDAccount>(SELECTAccountFROMSupply WHEREAno='2948'ANDProjectno='001');3.使用ANY或ALL操作符的嵌套查詢ANY或ALL操作符時(shí)必須與比較運(yùn)算符配合使用,格式為:<字段><比較符>[ANY|ALL]<子查詢>ANY和ALL與比較運(yùn)算符結(jié)合及語義如表4.16所示4.3.4組合查詢SELECT語句的查詢結(jié)果是元組的集合,因此,可以將多個(gè)SELECT語句的查詢結(jié)果進(jìn)行組合操作。組合操作主要包括并操作UNION、交操作INTERSECT和差MINUS操作。例4-47查詢藍(lán)色或綠色的零件編號(hào)。SELECTAnoFROMAccessoryWHEREAcolor='藍(lán)'UNIONSELECTAnoFROMAccessoryWHEREAcolor='綠';①由于組合查詢的整體是一個(gè)查詢,故只能在最后一條語句的后面加結(jié)束符號(hào)“;”,而不能在每個(gè)分查詢子句后加結(jié)束符號(hào);②組合查詢中的每個(gè)分查詢結(jié)果集的結(jié)構(gòu)應(yīng)一致;4.4SQL的數(shù)據(jù)更新數(shù)據(jù)更新是指數(shù)據(jù)的插入、刪除和修改操作。SQL的數(shù)據(jù)更新語句主要包括INSERT(插入)、UPDATE(修改)和DELETE(刪除)三種。4.4.1插入語句

SQL的數(shù)據(jù)插入語句INSERT有兩種形式:一種是一次插入一個(gè)元組,另一種是一次插入一個(gè)子查詢的結(jié)果。1.插入單個(gè)元組插入單個(gè)元組的INSERT語句的格式為:INSERTINTO<表名>[(<屬性列1>[,<屬性列2>…])VALUES(<常量1>[,<常量2>]…);其功能是將新元組插入到指定表中,其中新插入的元組的<屬性列1>的值為<常量1>,<屬性列2>的值為<常量2>,…。INTO子句中沒有出現(xiàn)的屬性列,新記錄在這些列上將為空值。注意在表定義時(shí)說明了NOTNULL的屬性列不能取空值,否則會(huì)出錯(cuò)。如果INTO子句中沒有指明任何列名,則新插入的記錄必須在每個(gè)屬性列上均有值。例4-50零件表中插入一條新記錄(零件編號(hào):3000;零件名稱:渦輪;產(chǎn)地:南京;規(guī)格:W_h21;顏色:紅)INSERTINTOAccessoryVALUES('3000','渦輪','南京','W_h21','紅');2.插入子查詢的結(jié)果集SQL

允許將子查詢的結(jié)果嵌到數(shù)據(jù)插入語句中,以便將查詢得到的結(jié)果集作為數(shù)據(jù)插入到數(shù)據(jù)表中。插入子查詢結(jié)果集的INSERT語句格式為:INSERTINTO<表名>[(<屬性列1>[,<屬性列2>…])<子查詢>;例4-52求每項(xiàng)工程所用零件的總數(shù)量。CREATETABLEProductsum(ProjectnoCHAR(10),SumINT);INSERTINTOProductsumSELECTProjectno,SUM(Account)FROMSupplyGROUPBYProjectno;說明:本例首先用CREATETABLE語句建立了Productsum基本表,然后使用INSERT語句將查詢得到的結(jié)果集插入到Productsum基本表中。4.4.2刪除語句數(shù)據(jù)刪除語句的一般格式為:

DELETE FROM<表名> [WHERE<條件>];DELETE語句的功能是從指定表中刪除滿足WHERE子句條件的所有元組。如果省略WHERE子句,表示刪除表中全部的元組。注意DELETE語句與DROPTABLE語句的區(qū)別,DELETE語句刪除的是表中的數(shù)據(jù),而DROPTABLE語句刪除的是表的結(jié)構(gòu)。例4-53刪除編號(hào)為“007”的工程記錄。DELETEFROMProjectWHEREProjectno='007';例4-54刪除所有的供應(yīng)零件記錄。DELETEFROMSupply;4.4.3修改語句數(shù)據(jù)修改語句的一般格式為:

UPDATE<表名>SET<列名>=<表達(dá)式>[,<列名2>=<表達(dá)式2>]…[WHERE<條件>];SQL數(shù)據(jù)修改語句的功能是將<表名>中那些符合WHERE子句條件的元組的某些列,用SET子句中給出的表達(dá)式的值替代。如果UPDATE語句中無WHERE子句,則表示要修改指定表中的全部元組。在UPDATE語句的WHERE子句中可以嵌入查詢語句。例4-56將工程表中全部工程的預(yù)算增加10%。UPDATEProjectSETBudget=Budget*1.1;4.5視圖視圖是由基本表或其他視圖導(dǎo)出的虛表。數(shù)據(jù)庫中只存放視圖的定義,視圖并不存放數(shù)據(jù),用戶在視圖中看到的數(shù)據(jù)存放在相關(guān)的基本表中。視圖定義之后,和基本表一樣可以被用戶查詢,但通過視圖來更新基本表中的數(shù)據(jù)有一定的限制。視圖的作用主要有以下三個(gè)方面。(1)可以減輕普通用戶的工作。普通用戶關(guān)心的數(shù)據(jù)往往是對(duì)基本表進(jìn)行計(jì)算的,或統(tǒng)計(jì)的,或多表連接后的信息,數(shù)據(jù)庫管理員可把這些數(shù)據(jù)做成視圖,使這些視圖直接滿足普通用戶的要求。(2)視圖是數(shù)據(jù)庫系統(tǒng)的一種安全機(jī)制。對(duì)不同的用戶,提供不同的視圖,不讓用戶直接面對(duì)基本表,使得某些重要或機(jī)密的數(shù)據(jù)不出現(xiàn)在無權(quán)看這些數(shù)據(jù)的用戶的視圖上。(3)視圖可以提高數(shù)據(jù)的邏輯獨(dú)立性。在數(shù)據(jù)庫需要重構(gòu)時(shí),可以減少對(duì)用戶和應(yīng)用程序的影響。4.5.1視圖的定義和刪除1.定義視圖SQL語言定義視圖的一般格式為:CREATEVIEW<視圖名>[(<列名1>[,<列名2>]…)]AS<子查詢>[WITHCHECKOPTION];其中<子查詢>可以是任意復(fù)雜的SELECT查詢語句,但不同的是在視圖中的<子查詢>通常不允許含有ORDERBY子句和DISTINCT短語。<列名>是<子查詢>的結(jié)果在該視圖中的屬性名稱,它必須與<子查詢>中的目標(biāo)列相對(duì)應(yīng)。它要么全部省略要么全部指定,但若<子查詢>中的目標(biāo)列是集函數(shù)、表達(dá)式和多表連接的同名列時(shí),必須全部指定<列名>,另外若視圖要用與<子查詢>中的目標(biāo)列名不同的新名時(shí),也必須全部指定<列名>。WITHCHECKOPTION選項(xiàng)表示在對(duì)視圖更新操作時(shí)要保證操作的數(shù)據(jù)滿足視圖定義的謂詞條件。例4-59建立紅色零件的視圖。CREATEVIEW紅色零件ASSELECTAno,Aname,Aplace,AspecFROMAccessoryWHEREAcolor='紅';例4-60建立一個(gè)“002”工程所需零件的視圖,其屬性包括工程代碼,工程名稱,所需零件名稱,用量,并要求進(jìn)行修改時(shí)須保證該視圖只有“002”工程所需的零件。CREATEVIEW工程零件(工程代碼,工程名稱,所需零件名稱,用量)ASSELECTSupply.Projectno,Projectname,Aname,AccountFROMSupply,Project,AccessoryWHERESupply.Projectno=Project.ProjectnoANDSupply.Ano=Accessory.AnoWITHCHECKOPTION;2.刪除視圖SQL中視圖刪除的一般格式為:DROPVIEW<視圖名>;當(dāng)基本表刪除后,由該基本表導(dǎo)出的所有視圖(定義)沒有被刪除,但均已無法使用。刪除這些視圖(定義)需要顯式地使用DROPVIEW語句。視圖刪除后,視圖的定義將從數(shù)據(jù)字典中刪

溫馨提示

  • 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論