View 檢視表、視圖 (SQL View)

View 是藉由 SQL SELECT 查詢動態組合生成的資料表 (亦即 View 是由查詢得到的結果集組合而成的資料表)。View 內的資料紀錄是由其它實際存在的資料表中產生的,它就像是一個虛擬資料表,實際上資料庫 (或說是硬碟) 裡面是不存在這一個資料表的 (只存在此 View 的相關定義),但是我們使用上卻有如實際存在的資料表 - 所有的 SQL 查詢語法都可以操作在此 View 上。

資料表是一種實體結構 (physical structure),而 View 是一種虛擬結構 (virtual structure)。

View 有哪些特性

  1. 加強資料庫的安全性,View 可以將實體資料表結構隱藏起來,同時限制使用者只可以檢視及使用哪些資料表欄位。
  2. 檢視表是唯讀的,亦即外部使用者無法直接透過 View 去修改內部資料。
  3. 將複雜的 SQL 查詢包裝在 View 中,可以簡化查詢的複雜度。
  4. 當資料表結構有變更時,只需要更改 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:

ProductPriceQuantity
LCD4000100
CPU5000200

我們可以建立一個方便查詢各產品售出總額的 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
ProductP_SUM
CPU1000000
LCD400000