View 檢視表、視圖 (SQL View)
View 是藉由 SQL SELECT 查詢動態組合生成的資料表 (亦即 View 是由查詢得到的結果集組合而成的資料表)。View 內的資料紀錄是由其它實際存在的資料表中產生的,它就像是一個虛擬資料表,實際上資料庫 (或說是硬碟) 裡面是不存在這一個資料表的 (只存在此 View 的相關定義),但是我們使用上卻有如實際存在的資料表 - 所有的 SQL 查詢語法都可以操作在此 View 上。
資料表是一種實體結構 (physical structure),而 View 是一種虛擬結構 (virtual structure)。
View 有哪些特性
- 加強資料庫的安全性,View 可以將實體資料表結構隱藏起來,同時限制使用者只可以檢視及使用哪些資料表欄位。
- 檢視表是唯讀的,亦即外部使用者無法直接透過 View 去修改內部資料。
- 將複雜的 SQL 查詢包裝在 View 中,可以簡化查詢的複雜度。
- 當資料表結構有變更時,只需要更改 View 的設定,不需更改程式。
建立 View (SQL CREATE VIEW)
CREATE VIEW view_name [(column_list)] AS
SELECT column_name(s)
FROM table_name
WHERE condition;
例如:
CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;
一個 View 可以由查詢實體資料表而建立,亦可以查詢其它已存在的 View 而建立。
更新 View (SQL CREATE OR REPLACE VIEW)
如果加上 OR REPLACE
子句的意思就是若同名的 View 已經存在就覆蓋取代它。如果 View 不存在,我們可以把 CREATE OR REPLACE VIEW 看做是如同 CREATE VIEW;而如果 View 已存在,我們可以把 CREATE OR REPLACE VIEW 看做是 ALTER VIEW。
CREATE OR REPLACE VIEW view_name [(column_list)] AS
SELECT column_name(s)
FROM table_name
WHERE condition;
刪除 View (SQL DROP VIEW)
DROP VIEW view_name;
View 使用實例 (Example)
假設這是一個產品訂單資料表 p_orders:
Product | Price | Quantity |
---|---|---|
LCD | 4000 | 100 |
CPU | 5000 | 200 |
我們可以建立一個方便查詢各產品售出總額的 View:
CREATE VIEW view_p_sum (Product, P_SUM) AS
SELECT Product, Price*Quantity FROM p_orders GROUP BY Product;
接著,你就可以像操作一般資料表:
SELECT * FROM view_p_sum
Product | P_SUM |
---|---|
CPU | 1000000 |
LCD | 400000 |