摘要:在本教程中,您將學習 SQL 檢視以及如何管理資料庫檢視,例如建立新檢視、修改現有檢視和刪除檢視。
SQL 檢視簡介 #
在 SQL 中,檢視是儲存在資料庫系統中的一個命名的查詢。
與表不同,檢視不物理儲存資料。資料庫系統只儲存檢視的定義。
當您從檢視中查詢資料時,資料庫系統會執行該查詢以從底層表中檢索資料。
有些檢視是可更新的。這意味著您可以透過可更新的檢視修改底層表的資料。
建立 SQL 檢視 #
要建立新檢視,您可以使用 CREATE VIEW 語句,後跟一個查詢,如下所示:
CREATE VIEW [IF NOT EXISTS] view_name
AS
queryCode language: SQL (Structured Query Language) (sql)在此語法中:
- 首先,在
CREATE VIEW子句之後指定檢視的名稱。IF NOT EXISTS選項可防止建立已存在的檢視。 - 其次,在
AS關鍵字之後提供一個SELECT語句。這個SELECT語句被稱為檢視定義查詢。
SELECT 語句可以從一個或多個表中檢索資料。這些表被稱為基表。
例如,以下語句基於 employees 和 departments 表建立了一個名為 employee_contacts 的檢視。

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)在此示例中,我們基於一個從 employees 和 departments 表連線資料的查詢建立了一個檢視。
指定 SQL 檢視列 #
預設情況下,檢視使用定義查詢的列名。如果您想使用不同的名稱,可以在 CREATE VIEW 子句中明確指定它們。
CREATE VIEW view_name(column1, column2, ...)
AS
query;Code language: SQL (Structured Query Language) (sql)在此語法中,我們在檢視名稱後為檢視指定一個用逗號分隔的列列表。
例如,以下語句建立了一個名為 payroll 的檢視,其列名與基表不同。
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)修改檢視 #
要修改檢視結構,例如向檢視新增新列或從檢視中刪除列,您可以使用 CREATE OR REPLACE VIEW 語句。
CREATE OR REPLACE view_name
AS
query;Code language: SQL (Structured Query Language) (sql)如果檢視不存在,CREATE OR REPLACE 語句會建立一個新檢視;如果檢視已存在,則會替換現有檢視。
例如,以下語句透過新增 department 列並將 compensation 列重新命名為 salary 列來更改 payroll 檢視。
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 IF EXISTS view_name;Code language: SQL (Structured Query Language) (sql)在此語法中:
- 首先,在
DROP VIEW關鍵字之後指定要刪除的檢視的名稱 (view_name)。 - 其次,使用
IF EXISTS選項有條件地僅在檢視存在時刪除它。如果您不使用IF EXISTS選項,而檢視不存在,資料庫系統將發出錯誤。IF EXISTS選項可防止資料庫因刪除不存在的檢視而發出錯誤。
請注意,DROP VIEW 語句只刪除檢視,不刪除基表。
以下語句使用 DROP VIEW 語句從資料庫中刪除 payroll 檢視。
DROP VIEW payroll;Code language: SQL (Structured Query Language) (sql)為何使用 SQL 檢視 #
- 簡化複雜查詢:檢視允許您封裝包含連線、聚合、聯合和篩選的複雜查詢,幫助您編寫更直接的查詢。
- 資料安全:檢視可以透過僅公開相關資料來限制對底層表中敏感資料的訪問。您可以建立一個只顯示必要資料的檢視,並授予使用者訪問該檢視的許可權,而不是讓他們直接訪問資料庫表。
- 一致的介面:即使底層表結構發生變化,檢視也能為客戶端應用程式提供一致的資料介面。
摘要 #
- 檢視是儲存在資料庫中的一個命名查詢。
- 使用
CREATE VIEW語句建立新檢視。 - 使用
CREATE OR REPLACE VIEW語句建立或修改檢視。 - 使用
DROP VIEW語句刪除檢視。