課程 27:建立視圖 `VIEW`
學會使用 SQL 建立視圖 (VIEW),簡化複雜查詢、強化資料抽象與安全性,並實作 CREATE VIEW、查詢與刪除語法。
- 重複查詢邏輯模組化
理論
視圖 (View) 是一個虛擬的表格,它的內容是基於預定義的 SQL 查詢的結果。視圖本身不儲存數據,它只是儲存了查詢語句。每次查詢視圖時,資料庫都會重新執行 underlying 的查詢語句來獲取最新的數據。
使用視圖的主要優點包括:
- 簡化複雜查詢: 將複雜的 JOIN 或 WHERE 子句封裝在視圖中,讓後續查詢更簡單。
- 提高安全性: 可以限制用戶只能訪問視圖中的特定欄位和行,而不是整個表格。
- 提供資料抽象: 隱藏底層表格結構的複雜性,讓用戶更容易理解和使用數據。
- 重複使用: 將常用的查詢邏輯儲存起來,避免重複編寫相同的語句。
實例
假設我們有一個 customers
表 (id, name, city) 和一個 orders
表 (order_id, customer_id, amount)。我們可以創建一個視圖來查看每個客戶的訂單總金額:
-- 創建視圖\nCREATE VIEW customer_order_totals AS\nSELECT c.name, SUM(o.amount) AS total_amount\nFROM customers c\nJOIN orders o ON c.id = o.customer_id\nGROUP BY c.name;\n\n-- 查詢視圖\nSELECT * FROM customer_order_totals;
語法
創建視圖的基本語法如下:
CREATE VIEW view_name AS\nSELECT column1, column2, ...\nFROM table_name\nWHERE condition;\n
CREATE VIEW view_name
: 指定要創建的視圖的名稱。AS
: 後面跟隨定義視圖的SELECT
語句。SELECT ... FROM ... WHERE ...
: 定義視圖內容的標準 SQL 查詢語句。
要刪除視圖,可以使用:
DROP VIEW view_name;
圖解
可以將視圖想像成一個「儲存的查詢」。當你查詢視圖時,資料庫會執行儲存的查詢並返回結果,就像它是一個真實存在的表格一樣。
[這裡可以放置一個簡單的圖示,表示 TABLES -> VIEW -> QUERY]
常見問題
- 視圖是否儲存數據? 不,視圖只儲存定義它的查詢語句。
- 能否更新視圖? 對於簡單的視圖(基於單一表格,不包含聚合函數等),某些資料庫系統允許通過視圖進行 INSERT, UPDATE 或 DELETE 操作,但這不是所有情況都支援,且行為複雜,通常建議直接操作底層表格。
- 視圖能包含 `ORDER BY` 嗎? 大多數資料庫系統不允許在視圖的定義中包含 `ORDER BY` 子句,因為視圖的目的是定義數據集,而不是數據的呈現順序。如果需要排序,應該在查詢視圖時添加 `ORDER BY`。
小練習
假設有兩個表格 employees
(employee_id, name, department_id) 和 departments
(department_id, department_name)。
- 創建一個視圖,顯示所有員工的名字及其所在的部門名稱。
- 查詢你剛剛創建的視圖。
- 嘗試刪除這個視圖。
互動式 SQL 練習:建立與查詢視圖
請注意:此模擬器僅支援非常基礎的視圖創建和查詢模擬,不模擬真實資料庫的所有行為和限制。
假設我們有兩個簡單的表格:users
(id, name) 和 posts
(post_id, user_id, title)。
用戶表(users)
id | name |
---|---|
1 | Alice |
2 | Bob |
貼文表(posts)
post_id | user_id | title |
---|---|---|
101 | 1 | Hello SQL |
102 | 1 | View Demo |
103 | 2 | About Views |