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

下載本文檔

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

文檔簡(jiǎn)介

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

——SQL

4.1SQL概述

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

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

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

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

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

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

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

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

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論