摘要:本教程介绍了 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)
如果视图不存在,该语句将创建该视图,如果视图已存在,该语句将更改当前视图。
例如,以下语句通过添加部门列和将薪酬 列重命名为工资列来更改工资单视图。
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 视图及其实用用法。现在,您应当知道什么是视图以及如何在数据库中创建、修改和删除视图。