摘要:本教學介紹 SQL 視圖的概念,並說明如何在資料庫中管理視圖。
SQL 視圖簡介
關聯式資料庫包含多個相關的資料表,例如員工、部門、職位等。當您想要查看這些資料表的資料時,您會使用 SELECT 陳述式 以及 JOIN 或 UNION 子句。
SQL 提供另一種檢視資料的方式,那就是使用視圖。 視圖就像執行查詢所產生的虛擬資料表。 關聯式資料庫管理系統 (RDBMS) 會將視圖以命名的 SELECT
儲存在資料庫目錄中。
每當您發出包含視圖名稱的 SELECT
陳述式時,RDBMS 會執行視圖定義查詢來建立虛擬資料表。然後,該虛擬資料表會被用作查詢的來源資料表。
為什麼需要使用視圖
視圖允許您將複雜的查詢儲存在資料庫中。 例如,您只需要發出一個簡單的查詢,如下所示,而不需要每次都發出複雜的 SQL 查詢才能查看資料
SELECT column_list
FROM view_name;
Code language: SQL (Structured Query Language) (sql)
視圖可幫助您為特定使用者群組打包資料。 例如,您可以為財務部門的員工建立薪資資料的視圖。
視圖有助於維護資料庫安全性。 您可以建立一個只顯示必要資料的視圖,並授予使用者存取該視圖的權限,而不是讓使用者直接存取資料庫資料表。
建立 SQL 視圖
要建立視圖,您可以使用 CREATE VIEW
陳述式,如下所示
CREATE VIEW view_name
AS
SELECT-statement
Code language: SQL (Structured Query Language) (sql)
首先,在 CREATE VIEW
子句之後指定視圖的名稱。
其次,建構一個 SELECT 陳述式,以從多個資料表中查詢資料。
例如,以下陳述式根據 employees
和 departments
資料表的資料建立員工聯絡資訊視圖。

CREATE VIEW employee_contacts AS
SELECT
first_name, last_name, email, phone_number, department_name
FROM
employees e
INNER JOIN
departments d ON d.department_id = e.department_id
ORDER BY first_name;
Code language: SQL (Structured Query Language) (sql)
預設情況下,視圖的欄位名稱與 SELECT
陳述式中指定的欄位名稱相同。 如果您想要重新命名視圖中的欄位,您可以將新的欄位名稱包含在 CREATE VIEW
子句之後,如下所示
CREATE VIEW view_name(new_column_list)
AS
SELECT-statement;
Code language: SQL (Structured Query Language) (sql)
例如,以下陳述式建立一個欄位名稱與基本資料表的欄位名稱不同的視圖。
CREATE VIEW payroll (first_name , last_name , job, compensation) AS
SELECT
first_name, last_name, job_title, salary
FROM
employees e
INNER JOIN
jobs j ON j.job_id= e.job_id
ORDER BY first_name;
Code language: SQL (Structured Query Language) (sql)
從視圖查詢資料
從視圖查詢資料與從資料表查詢資料相同。 以下陳述式從 employee_contacts
視圖中選取資料。
SELECT
*
FROM
employee_contacts;
Code language: SQL (Structured Query Language) (sql)

當然,您可以套用篩選或分組,如下所示
SELECT
job,
MIN(compensation),
MAX(compensation),
AVG(compensation)
FROM
payroll
WHERE
job LIKE 'A%'
GROUP BY job;
Code language: SQL (Structured Query Language) (sql)

修改 SQL 視圖
要修改視圖,無論是向視圖新增新的欄位或從視圖中移除欄位,您都使用相同的 CREATE OR REPLACE VIEW
陳述式。
CREATE OR REPLACE view_name AS
SELECT-statement;
Code language: SQL (Structured Query Language) (sql)
如果視圖不存在,該陳述式會建立視圖;如果視圖已存在,則會變更目前的視圖。
例如,以下陳述式透過新增部門欄位,並將 compensation 欄位重新命名為 salary 欄位,來變更薪資視圖。
CREATE OR REPLACE VIEW payroll (first_name , last_name , job , department , salary) AS
SELECT
first_name, last_name, job_title, department_name, salary
FROM
employees e
INNER JOIN
jobs j ON j.job_id = e.job_id
INNER JOIN
departments d ON d.department_id = e.department_id
ORDER BY first_name;
Code language: SQL (Structured Query Language) (sql)
SELECT
*
FROM
payroll;
Code language: SQL (Structured Query Language) (sql)

移除 SQL 視圖
要從資料庫中移除視圖,您可以使用 DROP VIEW
陳述式
DROP VIEW view_name;
Code language: SQL (Structured Query Language) (sql)
DROP VIEW
陳述式僅刪除視圖,不會刪除基本資料表。
例如,要移除薪資視圖,您可以使用以下陳述式
DROP VIEW payroll;
Code language: SQL (Structured Query Language) (sql)
在本教學中,您已了解 SQL 視圖及其應用。 現在,您應該知道什麼是視圖,以及如何在資料庫中建立、修改和刪除視圖。