分層的視圖
實際上視圖只是數據庫中的另一個表因此可以將其作為創建其他視圖的基礎事實上在同一個查詢中可以將視圖與其他視圖或表進行聯接然後再在其上創建一個新的視圖
如果想查找第個書架上價格最貴的前本書的作者則可以使用本章之前創建的vwTopbooksOnthShelf視圖並添加來自AUTHORS表的數據例如下面的代碼
CREATE VIEW vwTopBooksWithAuthors
AS SELECT
vwbk_id
vwtitle
auau_last_name
FROM vwTopbooksOnthShelf vw JOIN books_authors ba
ON vwbk_id = babk_id
JOIN authors au
ON baau_id = auau_id;
SELECT * FROM vwTopBooksWithAuthors;
bk_id title au_last_name
SQL Bible Kriegel
SQL Bible Trukhnov
Wiley Pathways: Introduction to Database Management Gillenson
Wiley Pathways: Introduction to Database Management Ponniah
Wiley Pathways: Introduction to Database Management Taylor
Wiley Pathways: Introduction to Database Management Powell
Wiley Pathways: Introduction to Database Management Miller
Wiley Pathways: Introduction to Database Management Trukhnov
Wiley Pathways: Introduction to Database Management Kriegel
SQL Functions: Programmers Reference Kriegel
SQL Functions: Programmers Reference Jones
SQL Functions: Programmers Reference Stephens
SQL Functions: Programmers Reference Plew
SQL Functions: Programmers Reference Garrett
( row(s) affected)
在上面這個例子中將一個視圖(vwTopbooksOnthShelf)與兩個表進行了聯接並在其上創建了另外一個視圖vwTopBooksWithAuthors這樣就可以使用單個SELECT語句從vwTopBooksWithAuthors視圖中抽取數據而無須關心封裝在這兩個視圖中的各種業務規則因為視圖已經對數據集的條件進行了限制即只返回位於頂層書架(甚至都不需要知道頂層是第層)中並且價格最貴的前本圖書
分層的視圖為我們提供了各種各樣的可能性設想一下可以構建一個精心設計的視圖層次結構從數據模型中抽取各種數據讓數據用戶只需要使用一個簡單的SELECT語句就可以獲取信息而無須關心底層數據的復雜性!當然這需要在服務器的性能方面付出一定的代價由於視圖本質上是動態的因此無法像優化表一樣對視圖進行同樣的優化對於數據檢索視圖的速度也不可能像表一樣快速在視圖之上添加另外一級的視圖將會對數據庫的性能造成更加負面的影響盡管分層的視圖有著合理的應用場合但應該注意它對性能造成的影響
返回目錄SQL實戰新手入門
編輯推薦
Oracle索引技術
高性能MySQL
數據倉庫與數據挖掘培訓視頻教程
From:http://tw.wingwit.com/Article/program/SQL/201311/16457.html