一、什么是视图
视图实际是一张虚拟表,储存在数据库里面,并没有真实的表结构,不包含数据。反之, 它提供了一种在数据库中存储常用复杂查询的方法。但是,您可以使用SQL SELECT语句SQL SELECT语句来访问视图数据,就像使用普通表或基表一样。
通过允许用户通过视图访问数据,而不是直接授予整个基表访问权限,视图也可以用作安全机制。
二、语法
使用CREATE VIEW语句创建视图。
CREATE VIEW view_name AS select_statement;
为了清楚说明这一点,我们来看下面这两张表employees和departments。
假设您要检索雇员的ID和姓名以及他们的部门名称,那么您需要执行【左连接】操作,如下所示:
SELECT t1.emp_id, t1.emp_name, t2.dept_name
FROM employees AS t1 LEFT JOIN departments AS t2
ON t1.dept_id = t2.dept_id;
输出如下:
但是,无论何时要访问此记录,都需要再次键入整个查询。如果您经常执行此类操作,则将变得非常不便和烦人。
在这种情况下,您可以创建一个视图以使查询结果更易于访问,如下所示:
CREATE VIEW emp_dept_view AS
SELECT t1.emp_id, t1.emp_name, t2.dept_name
FROM employees AS t1 LEFT JOIN departments AS t2
ON t1.dept_id = t2.dept_id;
现在,您可以使用视图emp_dept_view访问相同的记录
SELECT * FROM emp_dept_view;
注意:视图始终显示最新数据!每次查询视图时,数据库引擎都会执行与视图关联的SQL查询并重新创建数据。
三、替换现有视图
如果要更新或替换现有视图,则可以删除该视图并创建一个新视图,
如果是MySql数据库也可以使用CREATE VIEW语句中的OR REPLACE子句,如下所示:
CREATE OR REPLACE VIEW emp_dept_view AS
SELECT t1.emp_id, t1.emp_name, t1.salary, t2.dept_name
FROM employees AS t1 LEFT JOIN departments AS t2
ON t1.dept_id = t2.dept_id;
四、删除视图
如果不再需要视图,则可以使用DROP VIEW语句将其从数据库中删除,如以下语法所示:
DROP VIEW view_name;