视图一方面可以帮我们使用表的一部分而不是所有的表,另一方面也可以针对不同的用户制定不同的查询视图。比如,针对一个公司的销售人员,我们只想给他们看部分数据,而某些特殊的数据,比如采购的价格,则不会提供给他
目录
视图的理解
1. 视图是一种虚拟表,本身是不具有数据的,占用很少的内存空间,它是 SQL 中的一个重要概念
2. 视图建立在已有表的基础上,视图赖以建立的这些表称为基表
3. 视图的创建与删除只影响视图本身,不影响对应的基表。但是当对视图中的数据进行增加、删除和修改操作时,数据表中的数据会相应地发生变化,反之亦然
4. 向视图提供数据内容的语句为 SELECT 语句,可以将视图理解为存储起来的 SELECT 语句
创建视图
创建单表视图
#视图中的字段与基表的字段有对应的关系
CREATE VIEW vu_emp
AS
SELECT id,name,salary
FROM emps;
CREATE VIEW vu_emp1(emp_id,emp_name,monthly_sal)
AS
SELECT id,name,salary
FROM emps
WHERE salary > 5000;
#视图中的字段在基表中可能没有对应的字段
CREATE VIEW vu_emp_sal
AS
SELECT id,AVG(salary) avg_sal
FROM emps
WHERE id IS NOT NULL
GROUP BY id;
利用视图对数据进行格式化
我们经常要输出某个格式的内容,比如我们想输出员工姓名和对应的部门名,对应格式为emp_name(department_name),就可以使用视图来完成数据格式化的操作
CREATE VIEW emp_depart
AS
SELECT CONCAT(last_name,'(',department_name,')') AS emp_dept
FROM employees e JOIN departments d
WHERE e.department_id = d.partment_id;
基于视图创建视图
CREATE VIEW vu_emp
AS
SELECT id,name
FROM vu_emp1;
查看视图
查看数据库的表对象、视图对象
SHOW TABLES;
查看视图的结构
DESC 视图名称;
查看视图的属性信息
SHOW TABLE STATUS LIKE '视图名称';
查看视图的详细定义信息
SHOW CREATE VIEW 视图名称;
更新视图数据
更新表中的数据,也会导致视图中的数据更改,反之亦然
UPDATE vu_emp
SET salary = 10000
WHERE id = 101;
UPDATE emps
SET salary = 10000
WHERE id = 101;
CREATE OR REPLACE VIEW vu_emp1
AS
SELECT id,name,salary
FROM emps
WHERE salary > 5000;
ALTER VIEW vu_emp1
AS
SELECT id,name,salary
FROM emps;
不可更新的视图
删除视图
删除视图数据
删除表中的数据,也会导致视图中的数据被删除,反之亦然
DELETE FROM vu_emp
WHERE id = 101;
删除视图
删除视图只是删除视图的定义,并不会删除基表的数据
DROP VIEW vu_emp;
DROP VIEW IF EXISTS vu_emp2,vu_emp3; #如果存在,才删除
视图的优点