創建視圖()
下面的視圖將返回位於書櫃頂層(#)書架中價格最貴的前本圖書的名稱該示例使用了Microsoft SQL Server語法(它支持在視圖中使用ORDER BY子句)
CREATE VIEW vwTopbooksOnthShelf
AS
SELECT TOP
loc_position_left AS position
bk_title AS title
bk_id
FROM location INNER JOIN books
ON locationfk_bk_loc = booksbk_id
WHERE loc_shelf =
ORDER BY bk_price DESC;
運行視圖中的SELECT語句將返回數據的一個子集它只有個列限制為最頂部的條記錄並且按照BK_PRICE列排序(盡管通過該視圖無法訪問BK_PRICE列)
SELECT * FROM vwTopbooksOnthShelf;
position title bk_id
Wiley Pathways: Introduction to Database Management
SQL Bible
SQL Functions: Programmers Reference
( row(s) affected)
使用視圖抽取數據不僅可以隱藏底層數據模型的復雜性使數據對用戶更加友好而且還可以拒絕訪問未通過視圖暴露出來的行和列從而為數據訪問提供一種安全機制例如如果想讓用戶能夠查詢位於第個書架中價格最貴的前本圖書但是又不洩漏圖書的實際價格那麼上面例子中的視圖可以實現這樣的功能即使BK_PRICE列存在於底層的表中只有查詢該視圖(vwTopbooksOnthShelf視圖)權限的用戶也永遠無法看到圖書的價格或是查詢出價格排名第位的圖書
試一試用視圖包裝復雜性
下面將構造一個相對比較復雜的查詢其中包含了多個JOIN語句和一個GROUP BY子句以查找用指定搜索標志例如SQL標記的圖書並將其按照出版年份進行分組將該查詢包裝到一個視圖中然後觀察如何使用視圖向用戶隱藏底層的復雜性該示例使用Microsoft SQLServer創建但在本書介紹的其他RDBMS中無須任何修改也能正常運行
() 連接到RDBMS打開New Query窗口
() 在查詢窗口中輸入下面的代碼並單擊Execute按鈕
CREATE VIEW vwOneComplexView
AS
SELECT bk_title AS title
bk_published_year AS pub_year
locloc_shelf
FROM books bk INNER JOIN books_authors ba
ON bkbk_id = babk_id
INNER JOIN authors au
ON baau_id = auau_id
INNER JOIN location loc
ON bkbk_id = locfk_bk_loc
INNER JOIN search_books sb
ON sbbk_id = bkbk_id
INNER JOIN searchTags st
ON sttag_id = sbtag_id
WHERE locloc_shelf =
AND sttag_value IN (SQL)
GROUP BY
bk_published_year
bk_title
bk_price
loc_shelf
() 確認該命令是否執行成功以及是否確實創建了vwOneComplexView視圖
() 從查詢窗口中刪除代碼輸入下面的代碼執行一個新的查詢
SELECT * FROM vwOneComplexView
ORDER BY title;
title pub_year loc_shelf
Microsoft SQL Server Weekend Crash Course
SQL Bible
SQL Functions: Programmers Reference
Wiley Pathways: Introduction to Database Management
( row(s) affected)
示例說明
該視圖使用INNER JOIN語法連接了個表另外它強加了兩個限制一是僅搜索標記為SQL的圖書二是僅搜索位於頂層書架(第個書架)中的圖書同時按照BOOKS表的BK_PUBLISHED_YEAR列(以及其他個列)進行分組通過將這些復雜性包裝在一個視圖中就可以簡化業務用戶需要運行的查詢並同時實施某些業務和安全規則如果對該視圖僅有SELECT權限那麼用戶就不可能查詢到視圖指定搜索條件之外的圖書記錄只有以SQL標記並且位於第個書架中的圖書才會出現在視圖的結果集中用戶可以使用ORDER BY子句對視圖的結果進行排序只需要通過視圖暴露的別名就可以引用視圖在上面對該視圖的查詢中使用了ORDER BY子句按照TITLE列對查詢視圖的結果進行了排序該ORDER BY子句將覆蓋在定義視圖的語法中GROUP BY子句產生的默認順序
返回目錄SQL實戰新手入門
編輯推薦
Oracle索引技術
高性能MySQL
數據倉庫與數據挖掘培訓視頻教程
From:http://tw.wingwit.com/Article/program/SQL/201311/16462.html