☕ NEW! 完成新手任務即可參加抽獎!LINE 星巴克禮券等你拿,名額有限!        🎉 推廣活動:邀請好友註冊 DevLearn,累積推薦抽 LINE 星巴克禮券! 活動詳情 →        🔥 活動期間 2026/4/1 - 5/31 |已有 0 人參加       
sql 中級

VIEW 檢視表

什麼是 VIEW?

比喻:VIEW 就像一個存好的「書籤查詢」 🔖

你常常執行同一段複雜的 SQL 查詢—— VIEW 讓你把它存起來,取個名字,以後直接用名字查。

VIEW 是一個虛擬表,它不存資料,只存查詢語句。


建立 VIEW

-- 建立一個「學生成績總覽」的 View
CREATE VIEW student_scores AS     -- ← 定義 View 名稱
SELECT
    s.Name AS 學生,
    s.Department AS 科系,
    c.Name AS 課程,
    e.Score AS 分數
FROM Students s
INNER JOIN Enrollments e ON s.Id = e.StudentId
INNER JOIN Courses c ON e.CourseId = c.Id;

使用 VIEW

-- 用起來就像一般的表!
SELECT * FROM student_scores;

-- 可以加 WHERE
SELECT * FROM student_scores
WHERE 科系 = '資工系' AND 分數 >= 80;

-- 可以做聚合
SELECT 科系, AVG(分數) AS 平均分
FROM student_scores
GROUP BY 科系;

VIEW 的好處

1. 簡化複雜查詢

-- 沒有 View:每次都要寫一大串 JOIN
SELECT s.Name, c.Name, e.Score
FROM Students s
INNER JOIN Enrollments e ON s.Id = e.StudentId
INNER JOIN Courses c ON e.CourseId = c.Id
WHERE s.Department = '資工系';

-- 有 View:一行搞定
SELECT * FROM student_scores WHERE 科系 = '資工系';

2. 權限控制

-- 給業務部門看的 View(隱藏敏感欄位)
CREATE VIEW public_students AS
SELECT Name, Department, Score     -- ← 不包含 Email、Phone
FROM Students;

-- 業務部門只能存取這個 View,看不到完整資料
GRANT SELECT ON public_students TO sales_role;

3. 資料抽象

-- 即使底層表結構改了,View 可以保持介面不變
-- 應用程式不需要跟著改

修改和刪除 VIEW

-- 修改 View(CREATE OR REPLACE)
CREATE OR REPLACE VIEW student_scores AS
SELECT
    s.Name AS 學生,
    s.Department AS 科系,
    c.Name AS 課程,
    e.Score AS 分數,
    CASE WHEN e.Score >= 60 THEN '及格' ELSE '不及格' END AS 狀態
FROM Students s
INNER JOIN Enrollments e ON s.Id = e.StudentId
INNER JOIN Courses c ON e.CourseId = c.Id;

-- 刪除 View
DROP VIEW student_scores;
DROP VIEW IF EXISTS student_scores;  -- 安全寫法

Materialized View(實體化檢視)

普通 View 每次查詢都重新執行 SQL。 Materialized View 會快取結果,查詢更快。

-- 建立 Materialized View
CREATE MATERIALIZED VIEW mv_dept_stats AS
SELECT
    Department,
    COUNT(*) AS student_count,
    AVG(Score) AS avg_score
FROM Students
GROUP BY Department;

-- 查詢(直接讀快取,不重新計算)
SELECT * FROM mv_dept_stats;

-- 手動刷新(資料有變時需要刷新)
REFRESH MATERIALIZED VIEW mv_dept_stats;
比較 VIEW MATERIALIZED VIEW
存資料 ❌ 只存查詢 ✅ 存結果
速度 每次重算 快取,很快
即時性 永遠最新 需手動刷新
適用場景 簡化查詢 報表、儀表板

💡 大家的想法 · 0

載入中...
💬 即時聊天室 🟢 0 人在線
😀 😎 🤓 💻 🎮 🎸 🔥
➕ 新問題
📋 我的工單
💬 LINE 社群
🔒
需要註冊才能使用此功能
註冊帳號即可解鎖測驗、遊戲、簽到、筆記下載等所有功能,完全免費!
免費註冊