PostgreSQL - 第 13 天 - 視圖 (VIEW)
課程簡介
視圖是根據 SQL 查詢結果創建的虛擬表,它並不儲存實際的數據,而是儲存查詢結果的結構。視圖能夠簡化查詢、提升安全性,以及提高數據管理的靈活性。
什麼是視圖?
視圖(VIEW)是基於一個或多個表或其他視圖創建的虛擬表。視圖是一個「查詢別名」,可用來封裝複雜查詢,讓使用者只需訪問視圖名稱即可獲取查詢結果。視圖不會儲存數據本身,而是每次訪問時執行定義的查詢語句。
視圖的特性包括:
- 簡化複雜查詢。
- 提高數據隱私性,允許用戶只查看特定欄位。
- 提供一致的數據檢視,無需重複撰寫複雜查詢。
創建視圖的語法
使用 CREATE VIEW
語句可以創建視圖:
1
2
3
4
CREATE VIEW 視圖名稱 AS
SELECT 欄位1, 欄位2, ...
FROM 表名
WHERE 條件;
範例
假設我們有一個 員工
表,裡面包含 姓名
、職位
和 月薪
。我們可以創建一個只顯示員工姓名和職位的視圖,隱藏月薪資訊。
1
2
3
CREATE VIEW 員工職位視圖 AS
SELECT 姓名, 職位
FROM 員工;
創建完這個視圖後,任何訪問 員工職位視圖
的用戶只能看到 姓名
和 職位
欄位,而無法看到 月薪
。
使用視圖
一旦創建了視圖,您可以像使用普通表一樣對其進行查詢:
1
SELECT * FROM 員工職位視圖;
此查詢將返回員工的姓名和職位,因為這是視圖的定義。
視圖的優點
1. 簡化複雜查詢
假設有一個複雜的查詢,用來分析每位員工的月薪與平均月薪的比率。這個查詢可以封裝在視圖中,以後只需訪問該視圖即可:
1
2
3
CREATE VIEW 員工月薪分析 AS
SELECT 姓名, 月薪, 月薪 / (SELECT AVG(月薪) FROM 員工) AS 工資比率
FROM 員工;
這樣,使用者可以通過簡單的查詢來查看每位員工的工資比率:
1
SELECT * FROM 員工月薪分析;
2. 提高安全性
視圖可以限制用戶訪問數據的欄位。例如,對於不需要知道員工薪資的用戶,只需提供一個不包含 月薪
欄位的視圖。
3. 提供一致的數據檢視
視圖可以標準化常見查詢的結果。這樣可以確保所有人看到的數據是一致的,即使底層表有細微變動,視圖依然提供相同的結構。
更新視圖中的數據
在某些情況下,可以通過視圖直接更新數據。但視圖的更新有一些限制,僅當視圖滿足特定條件時才允許更新操作。一般來說,視圖的更新必須直接對應到單一表中的一行,並且視圖不包含聚合函數或其他難以直接映射的計算。
範例
假設有一個視圖 高薪員工
,僅顯示月薪高於 50000 的員工:
1
2
3
4
CREATE VIEW 高薪員工 AS
SELECT 姓名, 月薪
FROM 員工
WHERE 月薪 > 50000;
對這個視圖進行更新將無法完成,因為視圖中的限制條件(月薪 > 50000
)可能在更新後不成立。
修改視圖
可以使用 CREATE OR REPLACE VIEW
語句來更新視圖定義:
1
2
3
CREATE OR REPLACE VIEW 員工職位視圖 AS
SELECT 姓名, 職位, 月薪
FROM 員工;
這將替換原本的 員工職位視圖
定義,讓視圖新增了 月薪
欄位。
刪除視圖
可以使用 DROP VIEW
語句來刪除視圖:
1
DROP VIEW 視圖名稱;
例如:
1
DROP VIEW 員工職位視圖;
這會刪除 員工職位視圖
,但不會影響原始表中的數據。
本日總結
今天我們學習了 PostgreSQL 中的視圖,並了解了它如何幫助我們簡化查詢、提高安全性以及提供一致的數據檢視。視圖能夠提升我們管理和訪問數據的靈活性,是一個實用的數據庫功能。明天我們將學習使用觸發器(Triggers)來處理自動化的數據操作。