SQL 视图(Views)


视图是可视化的表。

本章讲解如何创建、更新和删除视图。


SQL CREATE VIEW 语句

在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。

视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。

您可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,也可以呈现数据,就像这些数据来自于某个单一的表一样。

SQL CREATE VIEW 语法

CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;

参数说明:

  • CREATE VIEW: 声明你要创建一个视图。
  • view_name: 指定视图的名称。
  • AS: 指定关键字,表示视图的定义开始。
  • SELECT column1, column2, ...: 指定视图中包含的列,可以是表中的列或计算列。
  • FROM table_name: 指定视图从哪个表中获取数据。
  • WHERE condition: 可选部分,用于指定筛选条件,限制视图中的行。

注释:视图总是显示最新的数据!每当用户查询视图时,数据库引擎通过使用视图的 SQL 语句重建数据。


SQL CREATE VIEW 实例

假设你有一个包含员工信息的表 employees,包括以下列:employee_id、first_name、last_name、salary 和 department_id,现在,我们将创建一个视图,显示工资高于某个阈值的员工信息。

实例如下:

-- 创建包含高工资员工信息的视图
CREATE VIEW high_salary_employees AS
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE salary > 50000;

在这个例子中,我们创建了一个名为 high_salary_employees 的视图,该视图包含了那些工资高于 50000 的员工的信息。

现在,你可以像查询普通表一样使用这个视图:

-- 查询高工资员工视图
SELECT *
FROM high_salary_employees;

这将返回所有工资高于 50000 的员工的详细信息,而不需要每次都编写相同的筛选条件。

值得注意的是,视图本质上是一个虚拟的表,它并不存储数据,而是基于基础表的查询结果生成。因此,如果基础表的数据发生变化,视图的内容也会相应地更新。

SQL 更新视图

在 SQL 中,你不能直接使用 UPDATE 语句来更新视图,因为视图是基于查询结果生成的虚拟表,而不是实际存储数据的表。

更新视图的实质是通过更新视图所基于的表中的数据,然后视图会反映这些变化。

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

其中,table_name 是基础表的名称,column1, column2, ... 是要更新的列,value1, value2, ... 是新的值,condition 是更新的条件。

现在,我们希望向 "Current Product List" 视图添加 "Category" 列。我们将通过下列 SQL 更新视图:

举例来说,如果你有一个名为 high_salary_employees 的视图,显示工资高于 50000 的员工信息,而这个视图基于 employees 表的查询结果,你可以通过以下步骤来更新数据:

-- 步骤 1: 更新 employees 表中的数据
UPDATE employees
SET salary = 60000
WHERE employee_id = 1001;

-- 步骤 2: 查询更新后的高工资员工视图
SELECT *
FROM high_salary_employees;

这样,你更新了 employees 表中的数据,而视图 high_salary_employees 将反映出这些变化。



SQL 撤销视图

在 SQL 中,撤销(或删除)视图是通过使用 DROP VIEW 语句来实现的。

DROP VIEW 语句用于从数据库中删除一个已存在的视图。语法如下:

DROP VIEW [IF EXISTS] view_name;

参数说明:

  • DROP VIEW: 表示你要删除一个视图。

  • IF EXISTS: 可选部分,用于检查视图是否存在。如果存在,则执行删除操作;如果不存在,不会发生错误。在某些数据库系统中,这是可选的。

  • view_name: 指定要删除的视图的名称。

在执行以下语句后,视图 high_salary_employees 将被从数据库中删除。

-- 删除名为 high_salary_employees 的视图
DROP VIEW IF EXISTS high_salary_employees;

请注意,这并不影响基础表中的数据,只是删除了视图的定义。

如果你需要撤销或删除某个表中的数据,应该使用 DROP TABLE 语句。

在使用 DROP VIEW 语句时,请确保你真的想要删除该视图,因为一旦删除,将无法恢复视图的定义。