SQL 视图

摘要:本教程介绍了 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-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)

如果视图不存在,该语句将创建该视图,如果视图已存在,该语句将更改当前视图。

例如,以下语句通过添加部门列和将薪酬 列重命名为工资列来更改工资单视图。

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 视图及其实用用法。现在,您应当知道什么是视图以及如何在数据库中创建、修改和删除视图。