视图
为什么使用视图
**视图一方面可以帮我们使用表的一部分而不是所有的表,另一方面也可以针对不同的用户制定不同的查询视图。**比如,针对一个公司的销售人员,我们只想给他看部分数据,而某些特殊的数据,比如采购的价格,则不会提供给他。再比如,人员薪酬是个敏感的字段,那么只给某个级别以上的人员开放,其他人的查询视图中则不提供这个字段。
刚才讲的只是视图的一个使用场景,实际上视图还有很多作用。最后,我们总结视图的优点。
基本概念
视图(VIEW):一个或者多个数据表里的数据的逻辑显示,视图并不存储数据(一般用来隐藏敏感数据,例如:工资,银行卡等)
- 视图是一种
虚拟表
,本身是不具有数据
的,占用很少的内存空间,它是SQL中的一个重要概念。 - 视图建立在已有表的基础上,视图赖以建立的这些表称为基表。
-
视图的创建和删除只影响视图本身,不影响对应的基表。但是当对视图中的数据进行增加、删除和修改操作时,数据表中的数据会相应地发生变化
,反之亦然。 -
向视图提供数据内容的语句为SELECT语句,可以将视图理解为存储起来的SELECT语句
- 在数据库中,视图不会保存数据,数据真正保存在数据表中。当对视图中的数据进行增加、删除和修改操作时,数据表中的数据会相应地发生变化;反之亦然。
-
视图,是向用户提供基表数据的另一种表现形式。通常情况下,小型项目的数据库可以不使用视图,但是在大型项目中,以及数据表比较复杂的情况下,视图的价值就凸显出来了,它可以帮助我们把经常查询的结果集放到虚拟表中,提升使用效率。理解和使用起来都非常方便。
-
视图的优点:简化查询;控制数据的访问
创建视图
- 在CREATE VIEW语句中嵌入子查询
CREATE [OR REPLACE]
[ALGORITHM = {UNDEFINED MERGE |TEMPTABLE}] (这里是算法)
VIEW view_name [(字段列表)]
AS 查询语句
[WITH [CASCADED |LOCAL ] CHECK OPTION]
- 精简版
CREATE
VIEW view_name [(字段列表)]
AS 查询语句
创建单表视图
- 针对单表创建视图
# 针对单表创建视图
CREATE VIEW emps_view
AS SELECT * FROM emps;
SELECT * FROM emps_view;
- 确定视图中字段名的方式1
CREATE VIEW emps_view2
# 查询语句中字段的别名会作为视图的字段名
AS SELECT employee_id emp_id,last_name lname,salary
FROM emps
WHERE salary>8000;
- 确定视图中字段名的方式2
# 小括号内字段的个数与SELECT中字段的个数相同
CREATE VIEW emps_view3 (emp_id,NAME,monthly_sal)
AS SELECT employee_id emp_id,last_name lname,salary
FROM emps
WHERE salary>8000;
SELECT * FROM emps_view3;
- 情况二:视图中的字段在基表中可能没有对应的字段(用了函数)
CREATE VIEW emp_sal
AS
SELECT department_id,AVG(salary) avg_sal
FROM emps
WHERE department_id IS NOT NULL
GROUP BY department_id;
SELECT * FROM emp_sal;
针对多表(创建联合视图)
SELECT e.`employee_id`,e.`department_id`,d.`department_name`
FROM `depts` d JOIN `emps` e
ON d.`department_id`=e.`department_id`;
- 利用视图对数据进行格式化
CREATE VIEW vu_emp_dept1
AS
SELECT CONCAT(e.last_name,'(',d.department_name,')') emp_info
FROM `emps` e JOIN
`depts` d
ON e.department_id=d.department_id;
SELECT * FROM vu_emp_dept1;
基于视图创建视图
# 2.3基于视图创建视图
CREATE VIEW vu_emp4
AS SELECT first_name , last_name
FROM emps_view;
SELECT * FROM vu_emp4;
查看视图(其实和显示表差不多)
- 语法一:查看数据库的表对象、视图对象
SHOW TABLES;
- 语法二:查看试视图的结构
DESC / DESCRIBE 视图名称;
- 语法三:查看视图的属性信息
#查看视图的属性信息
SHOW TABLE STATUS LIKE '视图名称';
执行结果显示,注释Comment为VIEW,说明该表为视图,其他信息为null,说明这是一个虚表。
- 语法四:查看视图的详细定义信息
SHOW CREATE VIEW vu_emp4;
视图的DML操作
视图的DML操作和对表的操作几乎没有什么差别,就不再赘述了。