SQL 視圖

摘要:本教學介紹 SQL 視圖的概念,並說明如何在資料庫中管理視圖。

SQL 視圖簡介

關聯式資料庫包含多個相關的資料表,例如員工、部門、職位等。當您想要查看這些資料表的資料時,您會使用 SELECT 陳述式 以及 JOINUNION 子句。

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-statementCode language: SQL (Structured Query Language) (sql)

首先,在 CREATE VIEW 子句之後指定視圖的名稱。

其次,建構一個 SELECT 陳述式,以從多個資料表中查詢資料。

例如,以下陳述式根據 employeesdepartments 資料表的資料建立員工聯絡資訊視圖。

emp_dept_tables
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)
SQL View Example

當然,您可以套用篩選或分組,如下所示

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 Querying View

修改 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 Modify View Example

移除 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 視圖及其應用。 現在,您應該知道什麼是視圖,以及如何在資料庫中建立、修改和刪除視圖。