精通Oracle核心技術(shù)和項目實戰(zhàn)之視圖課件_第1頁
精通Oracle核心技術(shù)和項目實戰(zhàn)之視圖課件_第2頁
精通Oracle核心技術(shù)和項目實戰(zhàn)之視圖課件_第3頁
精通Oracle核心技術(shù)和項目實戰(zhàn)之視圖課件_第4頁
精通Oracle核心技術(shù)和項目實戰(zhàn)之視圖課件_第5頁
已閱讀5頁,還剩77頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第11章視圖視圖是Oracle提供的一種查詢機制。該機制不僅可以簡化各種查詢,還可以保護數(shù)據(jù)庫信息的安全。視圖在數(shù)據(jù)庫中可以理解為一張?zhí)摂M的表,使用視圖可以補充表結(jié)構(gòu)在某些需求方面的不足,可以讓開發(fā)人員更方便地查詢復(fù)雜數(shù)據(jù)。本章將主要介紹視圖的概念、作用以及如何創(chuàng)建、查詢、管理視圖。第11章視圖視圖是Oracle提供的一種查詢機制。該機制111.1Oracle視圖初學(xué)者聽到視圖會比較陌生,實際上視圖的創(chuàng)建和操作比較簡單。在直觀印象中它和表相似,但是它不具備表的某些功能。視圖的使用和管理在許多方面和表相似,通俗來說我們一般把視圖看作沒有數(shù)據(jù)的表,本節(jié)就將介紹視圖的概念和作用。11.1Oracle視圖初學(xué)者聽到視圖會比較陌生,實際上211.1.1視圖的概念視圖是由select查詢語句定義的、基于一個或多個表(或視圖)的一個邏輯表。視圖本身不包含任何數(shù)據(jù),也就是說視圖只是一個查詢語句的結(jié)果。它的數(shù)據(jù)最終是表中獲取的,這些表我們可以稱為基表,所以不需要在表空間中為視圖分配存儲空間。理解如圖所示。11.1.1視圖的概念視圖是由select查詢語句定義的311.1.2視圖的作用有讀者可能會產(chǎn)生疑問,既然視圖和表相似,為什么還要學(xué)習(xí)它,其實除了select語句之外,視圖在insert、update和delete語句方面受限制,視圖的作用如下:(1)使數(shù)據(jù)簡化。(2)使數(shù)據(jù)更加獨立。(3)增加安全性。11.1.2視圖的作用有讀者可能會產(chǎn)生疑問,既然視圖和表411.1.3視圖的分類在Oracle數(shù)據(jù)庫中,視圖可以被分成這樣幾種類型,關(guān)系視圖、內(nèi)嵌視圖、對象視圖和物理化視圖。在本書中,將學(xué)習(xí)關(guān)系視圖和內(nèi)嵌視圖。關(guān)系視圖就是一個續(xù)表,它可以定義對數(shù)據(jù)的查詢,允許其他查詢重復(fù)使用該對象。關(guān)系視圖屬于簡單視圖,在數(shù)據(jù)庫字典中可以查看它的信息。內(nèi)嵌視圖則是子查詢的一種,它適合不重用的對數(shù)據(jù)的查詢,其他查詢無法使用該視圖,這種視圖不需要create命令完成,所以在數(shù)據(jù)庫字典中無法查看該視圖的信息。11.1.3視圖的分類在Oracle數(shù)據(jù)庫中,視圖可以被511.2關(guān)系視圖創(chuàng)建和使用可以直接使用SQL語句創(chuàng)建一個視圖,也可以使用工具SQL

Developer、OEM來創(chuàng)建視圖。在創(chuàng)建視圖時,只是將視圖的定義信息保存到數(shù)據(jù)字典中,在視圖中并不保存任何數(shù)據(jù),通過視圖而操作的數(shù)據(jù)仍然保存在表中,所以不需要在表空間中為視圖分配存儲空間。11.2關(guān)系視圖創(chuàng)建和使用可以直接使用SQL語句創(chuàng)建一個611.2.1使用語句創(chuàng)建視圖視圖的創(chuàng)建比較簡單,有一定的語法結(jié)構(gòu),其語法結(jié)構(gòu)如圖所示。11.2.1使用語句創(chuàng)建視圖視圖的創(chuàng)建比較簡單,有一定的711.2.1使用語句創(chuàng)建視圖在創(chuàng)建視圖之前,為了確保視圖的正確性,應(yīng)先測試select子查詢的語句,所以創(chuàng)建視圖的正確步驟是:(1)編寫select子查詢語句。(2)測試select子查詢語句。(3)檢查查詢結(jié)果的正確性。(4)使用該select子查詢語句創(chuàng)建視圖。創(chuàng)建視圖時,可以創(chuàng)建單表視圖,也可以創(chuàng)建多表視圖以及視圖的視圖、無源表視圖。下面將具體講解。11.2.1使用語句創(chuàng)建視圖在創(chuàng)建視圖之前,為了確保視圖811.2.1使用語句創(chuàng)建視圖1.創(chuàng)建單表視圖單表視圖表示創(chuàng)建視圖時,是根據(jù)一個表來創(chuàng)建。在創(chuàng)建視圖之前先列出表的信息,方便和視圖作對比?!臼纠?1-1】創(chuàng)建視圖,這個視圖的作用是顯示city是Lansing的顧客customer_id、cust_first_name、cust_last_name、city、phone_number?!臼纠?1-2】現(xiàn)在我們來查詢這個視圖,查詢視圖的語法和查詢表一樣。11.2.1使用語句創(chuàng)建視圖1.創(chuàng)建單表視圖911.2.1使用語句創(chuàng)建視圖2.創(chuàng)建多表視圖在通常情況下,視圖不會只根據(jù)一個表來創(chuàng)建,它會有兩個或多個源表。下面我們來介紹基于兩個表的視圖,創(chuàng)建多表視圖的語法如圖所示。11.2.1使用語句創(chuàng)建視圖2.創(chuàng)建多表視圖1011.2.1使用語句創(chuàng)建視圖【示例11-3】創(chuàng)建一個基于兩個表的視圖,把orders表和customersnew表關(guān)聯(lián)起來查詢,查詢其中order_id,、order_date、customer_id,、cust_first_name等信息?!臼纠?1-4】現(xiàn)在我們來查詢這個視圖,查詢視圖的語法和查詢表一樣。11.2.1使用語句創(chuàng)建視圖【示例11-3】創(chuàng)建一個基于1111.2.1使用語句創(chuàng)建視圖3.創(chuàng)建視圖的視圖視圖不僅可以建立在單表或多表上,也可以用其他的視圖作為源表創(chuàng)建新的視圖?,F(xiàn)在我們簡單演示一下在視圖的基礎(chǔ)上創(chuàng)建一個視圖,語法如圖所示。11.2.1使用語句創(chuàng)建視圖3.創(chuàng)建視圖的視圖1211.2.1使用語句創(chuàng)建視圖【示例11-5】創(chuàng)建一個前面示例11-1的一個子視圖,其實就是去掉cust_last_name這列?!臼纠?1-6】現(xiàn)在我們來查詢這個視圖,查詢視圖的語法和查詢表一樣。11.2.1使用語句創(chuàng)建視圖【示例11-5】創(chuàng)建一個前面1311.2.1使用語句創(chuàng)建視圖4.創(chuàng)建無源表視圖在Oracle數(shù)據(jù)庫中,我們可以在沒有源表時,創(chuàng)建視圖。但是這種情況下,視圖雖然是創(chuàng)建了,但是還不能使用。等到它的源表創(chuàng)建完成之后,就可以正常使用了。這種創(chuàng)建視圖的方式成為強制創(chuàng)建視圖??梢允褂胒orce選項來強制創(chuàng)建視圖。其語法結(jié)構(gòu)如圖所示。11.2.1使用語句創(chuàng)建視圖4.創(chuàng)建無源表視圖1411.2.1使用語句創(chuàng)建視圖【示例11-7】強制創(chuàng)建視圖vw_table,假設(shè)該視圖的源表名稱為tableview?!臼纠?1-8】現(xiàn)在我們來查詢這個視圖,查詢視圖的語法和查詢表一樣。11.2.1使用語句創(chuàng)建視圖【示例11-7】強制創(chuàng)建視圖1511.2.1使用語句創(chuàng)建視圖5.設(shè)置視圖只讀(readonly)通常簡單的視圖是允許進行DML操作的,但是這樣容易出現(xiàn)邏輯問題,因為視圖增加或更新數(shù)據(jù)實際上是在操作視圖的源表。所以在創(chuàng)建視圖時為了避免用戶修改數(shù)據(jù),可以把視圖設(shè)成為只讀屬性,其操作比較簡單,語法如圖所示。11.2.1使用語句創(chuàng)建視圖5.設(shè)置視圖只讀(read1611.2.1使用語句創(chuàng)建視圖【示例11-9】創(chuàng)建視圖,這個視圖的作用是顯示city是Lansing的顧客customer_id、cust_first_name、cust_last_name、city、phone_number,并且要覆蓋前面原有的視圖,設(shè)置此視圖為只讀屬性效果?!臼纠?1-10】對只讀視圖vw_cus進行查詢、增加數(shù)據(jù)、插入等DML操作進行測試。11.2.1使用語句創(chuàng)建視圖【示例11-9】創(chuàng)建視圖,這1711.2.1使用語句創(chuàng)建視圖6.設(shè)置視圖約束(checkoption)checkoption選項表示視圖啟動了和子查詢條件一樣的約束。也就是說,如果對視圖修改或插入的數(shù)據(jù)和查詢條件不一致,那么該操作會被終止。關(guān)于檢查約束前面已經(jīng)講過,同樣可以為視圖設(shè)置檢查約束,語法如圖所示。11.2.1使用語句創(chuàng)建視圖6.設(shè)置視圖約束(chec1811.2.1使用語句創(chuàng)建視圖【示例11-11】創(chuàng)建視圖,這個視圖的作用是顯示city是Lansing的顧客customer_id、cust_first_name、cust_last_name、city、phone_number,并且為此視圖設(shè)置檢查約束。【示例11-12】通過Oracle中的數(shù)據(jù)字典user_constraints,查詢使用withcheckoption所創(chuàng)建的約束。11.2.1使用語句創(chuàng)建視圖【示例11-11】創(chuàng)建視圖,1911.2.2使用SQLDeveloper創(chuàng)建視圖對于記不住視圖語法者,使用SQLDeveloper工具創(chuàng)建視圖方便簡潔,下面我們就為大家演示一下如何使用該工具來創(chuàng)建視圖?!臼纠?1-13】使用SQLDeveloper工具創(chuàng)建一個基于兩個表的視圖,把orders表和employees表關(guān)聯(lián)起來查詢,查詢其中order_id、order_date、sales_rep_id、first_name。11.2.2使用SQLDeveloper創(chuàng)建視圖對于記2011.2.3使用OEM創(chuàng)建視圖除了上述兩種方法外,在OEM中,可以通過界面交互的方式創(chuàng)建視圖?!臼纠?1-14】結(jié)合數(shù)據(jù)表customersnew,創(chuàng)建視圖,這個視圖的作用是顯示city是Lansing的顧客customer_id、cust_first_name信息。11.2.3使用OEM創(chuàng)建視圖除了上述兩種方法外,在OE2111.2.4查看及操作訪問視圖視圖創(chuàng)建之后,可以查看視圖,也可以使用操作訪問視圖。1.查看視圖定義視圖創(chuàng)建之后,其定義存在于數(shù)據(jù)庫中??梢酝ㄟ^SQLDeveloper的Views窗口來查看視圖VW_E在數(shù)據(jù)庫中的信息?!臼纠?1-15】查看示例11-11創(chuàng)建的視圖vw_cus?!臼纠?1-16】通過數(shù)據(jù)字典user_view查詢當(dāng)前用戶擁有的所有視圖信息。以查看vw_cus為例。11.2.4查看及操作訪問視圖視圖創(chuàng)建之后,可以查看視圖2211.2.4查看及操作訪問視圖2.查看關(guān)系視圖功能我們知道視圖創(chuàng)建之后,可以查詢視圖中的數(shù)據(jù)。除此之外,我們也可以像表一樣完成數(shù)據(jù)操縱的功能。即利用視圖,可以插入數(shù)據(jù)和更新數(shù)據(jù),也可以刪除其中數(shù)據(jù)。對視圖的操作僅限于更新、插入、刪除?!臼纠?1-17】Oracle內(nèi)置視圖user_updatable_columns定義了用戶視圖中各列的可更新情況。11.2.4查看及操作訪問視圖2.查看關(guān)系視圖功能2311.2.4查看及操作訪問視圖3.操作訪問視圖對視圖進行插入、更新操作。需要注意的是。只讀視圖僅可以進行查詢操作,而無法進行更新及插入數(shù)據(jù)的操作。對于創(chuàng)建了約束的視圖,使用視圖時會檢查涉及的數(shù)據(jù)是否能通過select子查詢的where條件,否則SQL語句本能成功執(zhí)行。11.2.4查看及操作訪問視圖3.操作訪問視圖2411.2.4查看及操作訪問視圖(1)更新視圖數(shù)據(jù)更新視圖數(shù)據(jù),實際是更新基礎(chǔ)表中的數(shù)據(jù)。我們可以利用update語句來更新視圖中的數(shù)據(jù),但是視圖本身并不存儲數(shù)據(jù)。更新視圖中的數(shù)據(jù)時,需要滿足對應(yīng)基表的相關(guān)約束?!臼纠?1-18】在視圖vw_cus,該視圖設(shè)置了withcheckoption選項,要求city是Lansing,現(xiàn)欲將customer_id為982員工姓名調(diào)整為“Alva”,可以更新視圖?!臼纠?1-19】通過更新視圖vw_cus,將customer_id為136員工姓名調(diào)整為“Alva”?!臼纠?1-20】查詢基礎(chǔ)表customersnew中的數(shù)據(jù)進行驗證。11.2.4查看及操作訪問視圖(1)更新視圖數(shù)據(jù)2511.2.4查看及操作訪問視圖(2)向視圖插入數(shù)據(jù)利用insert語句,向視圖中插入數(shù)據(jù)。使用視圖進行插入時,插入的數(shù)據(jù)也同樣需要滿足基表和視圖的相關(guān)約束?!臼纠?1-21】在視圖vw_cus中,插入新員工983的相關(guān)信息,但是沒有為city賦值,所以會遇到錯誤?!臼纠?1-22】在視圖vw_cus中,重新嘗試插入新顧客983的相關(guān)信息,此次為city賦值。【示例11-23】在向視圖vw_cus中插入數(shù)據(jù)之后,重新查詢視圖中的數(shù)據(jù)。11.2.4查看及操作訪問視圖(2)向視圖插入數(shù)據(jù)2611.2.4查看及操作訪問視圖(3)用視圖進行刪除?!臼纠?1-24】利用視圖vw_cus,刪除編號為983的顧客相關(guān)信息?!臼纠?1-25】視圖vw_cus刪除數(shù)據(jù)之后,重新查詢視圖中的數(shù)據(jù)。11.2.4查看及操作訪問視圖(3)用視圖進行刪除。2711.2.5使用SQLDeveloper工具訪問視圖使用SQLDeveloper對視圖數(shù)據(jù)操作也很直觀、簡單,相對而言使用起來容易上手。在本小節(jié)為大家演示一下在SQLDeveloper下對視圖數(shù)據(jù)的更新、插入、刪除等。1.更新數(shù)據(jù)【示例11-26】使用SQLDeveloper工具在將視圖w_cus中,把視圖中顧客編號為316的city改為北京。【示例11-27】使用SQLDeveloper工具在將視圖w_cus中,把視圖中顧客編號為316的cust_first_name改為Sissy?!臼纠?1-28】我們之前創(chuàng)建了視圖w_orders_cus,該視圖的源表是orders、customersnew,使用該視圖更新數(shù)據(jù),將顧客編號為316的cust_first_name改為Angel。11.2.5使用SQLDeveloper工具訪問視圖使2811.2.5使用SQLDeveloper工具訪問視圖2.視圖數(shù)據(jù)的插入有時候我們也可以為視圖增加數(shù)據(jù),為了操作簡單,就以SQLDeveloper工具為例為大家簡單演示一下視圖添加數(shù)據(jù)的操作。和前面講的修改數(shù)據(jù)一樣,打開對應(yīng)視圖即可對其操作。【示例11-29】使用SQLDeveloper工具在為視圖w_cus添加數(shù)據(jù),顧客編號為983的,city必須賦值為Lansing。從圖中,看出數(shù)據(jù)成功插入。11.2.5使用SQLDeveloper工具訪問視圖22911.2.5使用SQLDeveloper工具訪問視圖3.視圖數(shù)據(jù)的刪除視圖中刪除數(shù)據(jù)時,直接選中對應(yīng)行,單擊“X”按鈕,即可完成刪除視圖數(shù)據(jù),因為其操作很簡單,這里我們就不介紹了。對于多表連接視圖,刪除操作也是不允許的。11.2.5使用SQLDeveloper工具訪問視圖33011.3內(nèi)嵌視圖的創(chuàng)建和使用內(nèi)嵌視圖不需要視圖名,只是一段SQL語句,通常在子查詢中作為一個中間數(shù)據(jù)集,它可以在增加、刪除、修改操作中使用。內(nèi)嵌視圖無須創(chuàng)建真正的數(shù)據(jù)庫對象,而只是封裝查詢,因此會節(jié)約數(shù)據(jù)庫資源。11.3內(nèi)嵌視圖的創(chuàng)建和使用內(nèi)嵌視圖不需要視圖名,只是一3111.3內(nèi)嵌視圖的創(chuàng)建和使用【示例11-30】在表orders中存儲了顧客的訂單信息,現(xiàn)欲獲取order_total最多的前三個訂單的信息。結(jié)合利用rownum<3的條件可以返回前三行行記錄。【示例11-31】在示例11-14中,使用了內(nèi)嵌視圖獲得了訂單最多的三個記錄。同時,還想獲得這些訂單對應(yīng)的顧客的聯(lián)系方式,那么可以使用內(nèi)嵌視圖與表customersnew進行連接。此時,在內(nèi)嵌視圖與表customersnew中會存在重復(fù)列,因此,需要為內(nèi)嵌視圖指定別名。11.3內(nèi)嵌視圖的創(chuàng)建和使用【示例11-30】在表ord3211.4視圖的修改視圖的修改比較特殊,不能像表一樣修改,更準確的說他沒有修改選項,我們采用覆蓋原有視圖的方法來修改視圖,但這并不會影響視圖的使用。因為視圖本身不包含數(shù)據(jù),所以覆蓋原有視圖時就不存在數(shù)據(jù)丟失的問題。本小節(jié)將主要介紹使用SQLDeveloper視圖結(jié)構(gòu)和視圖數(shù)據(jù)的修改等操作。11.4視圖的修改視圖的修改比較特殊,不能像表一樣修改,3311.4.1使用語句修改視圖如果發(fā)現(xiàn)視圖的定義不合適,可以對其進行修改。實際上視圖中的select語句是不能直接修改的,所以修改視圖的一種方法是先刪除視圖,再重新創(chuàng)建。另一種方法是在創(chuàng)建視圖的create語句中使用orreplace選項。帶orreplace選項的create語句語法結(jié)構(gòu)如圖所示。11.4.1使用語句修改視圖如果發(fā)現(xiàn)視圖的定義不合適,可3411.4.2使用SQLDeveloper工具修改視圖下面我們用SQLDeveloper演示一下修改視圖的結(jié)構(gòu)?!臼纠?1-32】使用SQLDeveloper工具修改視圖vw_cus,將視圖中customer_id字段取別名為id。11.4.2使用SQLDeveloper工具修改視圖下3511.4.3使用OEM修改視圖除了使用語句和SQLDeveloper工具更改視圖外,也可以使用OEM修改視圖?!臼纠?1-33】使用OEM修改視圖vw_cus。11.4.3使用OEM修改視圖除了使用語句和SQLDe3611.5視圖的刪除視圖的刪除和表刪除操作方式一樣,可以使用SQL語句刪除,也可以使用PL/SQLDeveloper工具刪除。本節(jié)分別為大家介紹一下這兩種方法。11.5視圖的刪除視圖的刪除和表刪除操作方式一樣,可以使3711.5.1使用語句刪除視圖視圖在不需要時,可以將其從數(shù)據(jù)庫中刪除。刪除視圖的命令是dropview。主要語法如圖所示?!臼纠?1-34】以我們前面創(chuàng)建的vw_id_name為例,用SQL語句刪除視圖?!臼纠?1-35】查詢剛剛刪除的視圖。11.5.1使用語句刪除視圖視圖在不需要時,可以將其從數(shù)3811.5.2使用SQLDeveloper工具刪除視圖我們還可以在SQLDeveloper工具中直接刪除視圖,操作比較簡單。【示例11-36】刪除前面創(chuàng)建的無源表視圖vw_table為例,演示一下在SQLDeveloper工具下刪除視圖。11.5.2使用SQLDeveloper工具刪除視圖3911.5.3使用OEM刪除視圖除了使用語句和SQLDeveloper工具刪除視圖外,也可以使用OEM刪除視圖。使用OEM刪除視圖與修改視圖類似。【示例11-37】刪除我們前面創(chuàng)建的w_custwo為例,演示一下在OEM下刪除視圖。11.5.3使用OEM刪除視圖除了使用語句和SQLDe4011.6小結(jié)在Oracle中經(jīng)常使用視圖,視圖可以根據(jù)業(yè)務(wù)的需要從不同的角度展示數(shù)據(jù),它給數(shù)據(jù)庫管理者和用戶都提供了一定的便捷性,也提高了數(shù)據(jù)的安全性。視圖本身不包含任何數(shù)據(jù),它只是一個查詢,所有的數(shù)據(jù)都是從其它表中獲取到的,但數(shù)據(jù)有著邏輯獨立性。本章主要講解了視圖創(chuàng)建,還有視圖的修改,視圖數(shù)據(jù)的更改。本章的重點是理解什么是視圖,如何創(chuàng)建視圖,如何修改、刪除視圖。下一章將講解Oracle中的流程控制語句。11.6小結(jié)在Oracle中經(jīng)常使用視圖,視圖可以根據(jù)業(yè)41第11章視圖視圖是Oracle提供的一種查詢機制。該機制不僅可以簡化各種查詢,還可以保護數(shù)據(jù)庫信息的安全。視圖在數(shù)據(jù)庫中可以理解為一張?zhí)摂M的表,使用視圖可以補充表結(jié)構(gòu)在某些需求方面的不足,可以讓開發(fā)人員更方便地查詢復(fù)雜數(shù)據(jù)。本章將主要介紹視圖的概念、作用以及如何創(chuàng)建、查詢、管理視圖。第11章視圖視圖是Oracle提供的一種查詢機制。該機制4211.1Oracle視圖初學(xué)者聽到視圖會比較陌生,實際上視圖的創(chuàng)建和操作比較簡單。在直觀印象中它和表相似,但是它不具備表的某些功能。視圖的使用和管理在許多方面和表相似,通俗來說我們一般把視圖看作沒有數(shù)據(jù)的表,本節(jié)就將介紹視圖的概念和作用。11.1Oracle視圖初學(xué)者聽到視圖會比較陌生,實際上4311.1.1視圖的概念視圖是由select查詢語句定義的、基于一個或多個表(或視圖)的一個邏輯表。視圖本身不包含任何數(shù)據(jù),也就是說視圖只是一個查詢語句的結(jié)果。它的數(shù)據(jù)最終是表中獲取的,這些表我們可以稱為基表,所以不需要在表空間中為視圖分配存儲空間。理解如圖所示。11.1.1視圖的概念視圖是由select查詢語句定義的4411.1.2視圖的作用有讀者可能會產(chǎn)生疑問,既然視圖和表相似,為什么還要學(xué)習(xí)它,其實除了select語句之外,視圖在insert、update和delete語句方面受限制,視圖的作用如下:(1)使數(shù)據(jù)簡化。(2)使數(shù)據(jù)更加獨立。(3)增加安全性。11.1.2視圖的作用有讀者可能會產(chǎn)生疑問,既然視圖和表4511.1.3視圖的分類在Oracle數(shù)據(jù)庫中,視圖可以被分成這樣幾種類型,關(guān)系視圖、內(nèi)嵌視圖、對象視圖和物理化視圖。在本書中,將學(xué)習(xí)關(guān)系視圖和內(nèi)嵌視圖。關(guān)系視圖就是一個續(xù)表,它可以定義對數(shù)據(jù)的查詢,允許其他查詢重復(fù)使用該對象。關(guān)系視圖屬于簡單視圖,在數(shù)據(jù)庫字典中可以查看它的信息。內(nèi)嵌視圖則是子查詢的一種,它適合不重用的對數(shù)據(jù)的查詢,其他查詢無法使用該視圖,這種視圖不需要create命令完成,所以在數(shù)據(jù)庫字典中無法查看該視圖的信息。11.1.3視圖的分類在Oracle數(shù)據(jù)庫中,視圖可以被4611.2關(guān)系視圖創(chuàng)建和使用可以直接使用SQL語句創(chuàng)建一個視圖,也可以使用工具SQL

Developer、OEM來創(chuàng)建視圖。在創(chuàng)建視圖時,只是將視圖的定義信息保存到數(shù)據(jù)字典中,在視圖中并不保存任何數(shù)據(jù),通過視圖而操作的數(shù)據(jù)仍然保存在表中,所以不需要在表空間中為視圖分配存儲空間。11.2關(guān)系視圖創(chuàng)建和使用可以直接使用SQL語句創(chuàng)建一個4711.2.1使用語句創(chuàng)建視圖視圖的創(chuàng)建比較簡單,有一定的語法結(jié)構(gòu),其語法結(jié)構(gòu)如圖所示。11.2.1使用語句創(chuàng)建視圖視圖的創(chuàng)建比較簡單,有一定的4811.2.1使用語句創(chuàng)建視圖在創(chuàng)建視圖之前,為了確保視圖的正確性,應(yīng)先測試select子查詢的語句,所以創(chuàng)建視圖的正確步驟是:(1)編寫select子查詢語句。(2)測試select子查詢語句。(3)檢查查詢結(jié)果的正確性。(4)使用該select子查詢語句創(chuàng)建視圖。創(chuàng)建視圖時,可以創(chuàng)建單表視圖,也可以創(chuàng)建多表視圖以及視圖的視圖、無源表視圖。下面將具體講解。11.2.1使用語句創(chuàng)建視圖在創(chuàng)建視圖之前,為了確保視圖4911.2.1使用語句創(chuàng)建視圖1.創(chuàng)建單表視圖單表視圖表示創(chuàng)建視圖時,是根據(jù)一個表來創(chuàng)建。在創(chuàng)建視圖之前先列出表的信息,方便和視圖作對比?!臼纠?1-1】創(chuàng)建視圖,這個視圖的作用是顯示city是Lansing的顧客customer_id、cust_first_name、cust_last_name、city、phone_number?!臼纠?1-2】現(xiàn)在我們來查詢這個視圖,查詢視圖的語法和查詢表一樣。11.2.1使用語句創(chuàng)建視圖1.創(chuàng)建單表視圖5011.2.1使用語句創(chuàng)建視圖2.創(chuàng)建多表視圖在通常情況下,視圖不會只根據(jù)一個表來創(chuàng)建,它會有兩個或多個源表。下面我們來介紹基于兩個表的視圖,創(chuàng)建多表視圖的語法如圖所示。11.2.1使用語句創(chuàng)建視圖2.創(chuàng)建多表視圖5111.2.1使用語句創(chuàng)建視圖【示例11-3】創(chuàng)建一個基于兩個表的視圖,把orders表和customersnew表關(guān)聯(lián)起來查詢,查詢其中order_id,、order_date、customer_id,、cust_first_name等信息?!臼纠?1-4】現(xiàn)在我們來查詢這個視圖,查詢視圖的語法和查詢表一樣。11.2.1使用語句創(chuàng)建視圖【示例11-3】創(chuàng)建一個基于5211.2.1使用語句創(chuàng)建視圖3.創(chuàng)建視圖的視圖視圖不僅可以建立在單表或多表上,也可以用其他的視圖作為源表創(chuàng)建新的視圖?,F(xiàn)在我們簡單演示一下在視圖的基礎(chǔ)上創(chuàng)建一個視圖,語法如圖所示。11.2.1使用語句創(chuàng)建視圖3.創(chuàng)建視圖的視圖5311.2.1使用語句創(chuàng)建視圖【示例11-5】創(chuàng)建一個前面示例11-1的一個子視圖,其實就是去掉cust_last_name這列?!臼纠?1-6】現(xiàn)在我們來查詢這個視圖,查詢視圖的語法和查詢表一樣。11.2.1使用語句創(chuàng)建視圖【示例11-5】創(chuàng)建一個前面5411.2.1使用語句創(chuàng)建視圖4.創(chuàng)建無源表視圖在Oracle數(shù)據(jù)庫中,我們可以在沒有源表時,創(chuàng)建視圖。但是這種情況下,視圖雖然是創(chuàng)建了,但是還不能使用。等到它的源表創(chuàng)建完成之后,就可以正常使用了。這種創(chuàng)建視圖的方式成為強制創(chuàng)建視圖??梢允褂胒orce選項來強制創(chuàng)建視圖。其語法結(jié)構(gòu)如圖所示。11.2.1使用語句創(chuàng)建視圖4.創(chuàng)建無源表視圖5511.2.1使用語句創(chuàng)建視圖【示例11-7】強制創(chuàng)建視圖vw_table,假設(shè)該視圖的源表名稱為tableview?!臼纠?1-8】現(xiàn)在我們來查詢這個視圖,查詢視圖的語法和查詢表一樣。11.2.1使用語句創(chuàng)建視圖【示例11-7】強制創(chuàng)建視圖5611.2.1使用語句創(chuàng)建視圖5.設(shè)置視圖只讀(readonly)通常簡單的視圖是允許進行DML操作的,但是這樣容易出現(xiàn)邏輯問題,因為視圖增加或更新數(shù)據(jù)實際上是在操作視圖的源表。所以在創(chuàng)建視圖時為了避免用戶修改數(shù)據(jù),可以把視圖設(shè)成為只讀屬性,其操作比較簡單,語法如圖所示。11.2.1使用語句創(chuàng)建視圖5.設(shè)置視圖只讀(read5711.2.1使用語句創(chuàng)建視圖【示例11-9】創(chuàng)建視圖,這個視圖的作用是顯示city是Lansing的顧客customer_id、cust_first_name、cust_last_name、city、phone_number,并且要覆蓋前面原有的視圖,設(shè)置此視圖為只讀屬性效果?!臼纠?1-10】對只讀視圖vw_cus進行查詢、增加數(shù)據(jù)、插入等DML操作進行測試。11.2.1使用語句創(chuàng)建視圖【示例11-9】創(chuàng)建視圖,這5811.2.1使用語句創(chuàng)建視圖6.設(shè)置視圖約束(checkoption)checkoption選項表示視圖啟動了和子查詢條件一樣的約束。也就是說,如果對視圖修改或插入的數(shù)據(jù)和查詢條件不一致,那么該操作會被終止。關(guān)于檢查約束前面已經(jīng)講過,同樣可以為視圖設(shè)置檢查約束,語法如圖所示。11.2.1使用語句創(chuàng)建視圖6.設(shè)置視圖約束(chec5911.2.1使用語句創(chuàng)建視圖【示例11-11】創(chuàng)建視圖,這個視圖的作用是顯示city是Lansing的顧客customer_id、cust_first_name、cust_last_name、city、phone_number,并且為此視圖設(shè)置檢查約束?!臼纠?1-12】通過Oracle中的數(shù)據(jù)字典user_constraints,查詢使用withcheckoption所創(chuàng)建的約束。11.2.1使用語句創(chuàng)建視圖【示例11-11】創(chuàng)建視圖,6011.2.2使用SQLDeveloper創(chuàng)建視圖對于記不住視圖語法者,使用SQLDeveloper工具創(chuàng)建視圖方便簡潔,下面我們就為大家演示一下如何使用該工具來創(chuàng)建視圖。【示例11-13】使用SQLDeveloper工具創(chuàng)建一個基于兩個表的視圖,把orders表和employees表關(guān)聯(lián)起來查詢,查詢其中order_id、order_date、sales_rep_id、first_name。11.2.2使用SQLDeveloper創(chuàng)建視圖對于記6111.2.3使用OEM創(chuàng)建視圖除了上述兩種方法外,在OEM中,可以通過界面交互的方式創(chuàng)建視圖?!臼纠?1-14】結(jié)合數(shù)據(jù)表customersnew,創(chuàng)建視圖,這個視圖的作用是顯示city是Lansing的顧客customer_id、cust_first_name信息。11.2.3使用OEM創(chuàng)建視圖除了上述兩種方法外,在OE6211.2.4查看及操作訪問視圖視圖創(chuàng)建之后,可以查看視圖,也可以使用操作訪問視圖。1.查看視圖定義視圖創(chuàng)建之后,其定義存在于數(shù)據(jù)庫中??梢酝ㄟ^SQLDeveloper的Views窗口來查看視圖VW_E在數(shù)據(jù)庫中的信息。【示例11-15】查看示例11-11創(chuàng)建的視圖vw_cus?!臼纠?1-16】通過數(shù)據(jù)字典user_view查詢當(dāng)前用戶擁有的所有視圖信息。以查看vw_cus為例。11.2.4查看及操作訪問視圖視圖創(chuàng)建之后,可以查看視圖6311.2.4查看及操作訪問視圖2.查看關(guān)系視圖功能我們知道視圖創(chuàng)建之后,可以查詢視圖中的數(shù)據(jù)。除此之外,我們也可以像表一樣完成數(shù)據(jù)操縱的功能。即利用視圖,可以插入數(shù)據(jù)和更新數(shù)據(jù),也可以刪除其中數(shù)據(jù)。對視圖的操作僅限于更新、插入、刪除?!臼纠?1-17】Oracle內(nèi)置視圖user_updatable_columns定義了用戶視圖中各列的可更新情況。11.2.4查看及操作訪問視圖2.查看關(guān)系視圖功能6411.2.4查看及操作訪問視圖3.操作訪問視圖對視圖進行插入、更新操作。需要注意的是。只讀視圖僅可以進行查詢操作,而無法進行更新及插入數(shù)據(jù)的操作。對于創(chuàng)建了約束的視圖,使用視圖時會檢查涉及的數(shù)據(jù)是否能通過select子查詢的where條件,否則SQL語句本能成功執(zhí)行。11.2.4查看及操作訪問視圖3.操作訪問視圖6511.2.4查看及操作訪問視圖(1)更新視圖數(shù)據(jù)更新視圖數(shù)據(jù),實際是更新基礎(chǔ)表中的數(shù)據(jù)。我們可以利用update語句來更新視圖中的數(shù)據(jù),但是視圖本身并不存儲數(shù)據(jù)。更新視圖中的數(shù)據(jù)時,需要滿足對應(yīng)基表的相關(guān)約束?!臼纠?1-18】在視圖vw_cus,該視圖設(shè)置了withcheckoption選項,要求city是Lansing,現(xiàn)欲將customer_id為982員工姓名調(diào)整為“Alva”,可以更新視圖?!臼纠?1-19】通過更新視圖vw_cus,將customer_id為136員工姓名調(diào)整為“Alva”?!臼纠?1-20】查詢基礎(chǔ)表customersnew中的數(shù)據(jù)進行驗證。11.2.4查看及操作訪問視圖(1)更新視圖數(shù)據(jù)6611.2.4查看及操作訪問視圖(2)向視圖插入數(shù)據(jù)利用insert語句,向視圖中插入數(shù)據(jù)。使用視圖進行插入時,插入的數(shù)據(jù)也同樣需要滿足基表和視圖的相關(guān)約束。【示例11-21】在視圖vw_cus中,插入新員工983的相關(guān)信息,但是沒有為city賦值,所以會遇到錯誤?!臼纠?1-22】在視圖vw_cus中,重新嘗試插入新顧客983的相關(guān)信息,此次為city賦值?!臼纠?1-23】在向視圖vw_cus中插入數(shù)據(jù)之后,重新查詢視圖中的數(shù)據(jù)。11.2.4查看及操作訪問視圖(2)向視圖插入數(shù)據(jù)6711.2.4查看及操作訪問視圖(3)用視圖進行刪除?!臼纠?1-24】利用視圖vw_cus,刪除編號為983的顧客相關(guān)信息。【示例11-25】視圖vw_cus刪除數(shù)據(jù)之后,重新查詢視圖中的數(shù)據(jù)。11.2.4查看及操作訪問視圖(3)用視圖進行刪除。6811.2.5使用SQLDeveloper工具訪問視圖使用SQLDeveloper對視圖數(shù)據(jù)操作也很直觀、簡單,相對而言使用起來容易上手。在本小節(jié)為大家演示一下在SQLDeveloper下對視圖數(shù)據(jù)的更新、插入、刪除等。1.更新數(shù)據(jù)【示例11-26】使用SQLDeveloper工具在將視圖w_cus中,把視圖中顧客編號為316的city改為北京?!臼纠?1-27】使用SQLDeveloper工具在將視圖w_cus中,把視圖中顧客編號為316的cust_first_name改為Sissy?!臼纠?1-28】我們之前創(chuàng)建了視圖w_orders_cus,該視圖的源表是orders、customersnew,使用該視圖更新數(shù)據(jù),將顧客編號為316的cust_first_name改為Angel。11.2.5使用SQLDeveloper工具訪問視圖使6911.2.5使用SQLDeveloper工具訪問視圖2.視圖數(shù)據(jù)的插入有時候我們也可以為視圖增加數(shù)據(jù),為了操作簡單,就以SQLDeveloper工具為例為大家簡單演示一下視圖添加數(shù)據(jù)的操作。和前面講的修改數(shù)據(jù)一樣,打開對應(yīng)視圖即可對其操作?!臼纠?1-29】使用SQLDeveloper工具在為視圖w_cus添加數(shù)據(jù),顧客編號為983的,city必須賦值為Lansing。從圖中,看出數(shù)據(jù)成功插入。11.2.5使用SQLDeveloper工具訪問視圖27011.2.5使用SQLDeveloper工具訪問視圖3.視圖數(shù)據(jù)的刪除視圖中刪除數(shù)據(jù)時,直接選中對應(yīng)行,單擊“X”按鈕,即可完成刪除視圖數(shù)據(jù),因為其操作很簡單,這里我們就不介紹了。對于多表連接視圖,刪除操作也是不允許的。11.2.5使用SQLDeveloper工具訪問視圖37111.3內(nèi)嵌視圖的創(chuàng)建和使用內(nèi)嵌視圖不需要視圖名,只是一段SQL語句,通常在子查詢中作為一個中間數(shù)據(jù)集,它可以在增加、刪除、修改操作中使用。內(nèi)嵌視圖無須創(chuàng)建真正的數(shù)據(jù)庫對象,而只是封裝查詢,因此會節(jié)約數(shù)據(jù)庫資源。11.3內(nèi)嵌視圖的創(chuàng)建和使用內(nèi)嵌視圖不需要視圖名,只是一7211.3內(nèi)嵌視圖的創(chuàng)建和使用【示例11-30】在表orders中存儲了顧客的訂單信息,現(xiàn)欲獲取order_total最多的前三個訂單的信息。結(jié)合利用rownum<3的條件可以返回前三行行記錄?!臼纠?1-31】在示例11-14中,使用了內(nèi)嵌視圖獲得了訂單最多的三個記錄。同時,還想獲得這些訂單對應(yīng)的顧客的聯(lián)系方式,那么可以使用內(nèi)嵌視圖與表customersnew進行連接。此時,在內(nèi)嵌視圖與表cu

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論