视图
概念:
视图是基于表或另一个视图的逻辑表,一个视图并不包含真实的数据,它提供了另一个视角查看或改变表中的数据,视图本质上就是一个SELECT语句
功能:
视图可以起到隐藏数据的功能。因为视图可以选择性的显示表中的字段(或行)。
视图可以将复杂的多表连接查询的结果构成一个简单的表结构提供给用户。出于数据库设计的考虑,我们需要把雇员的信息存放到多个表中,但是在显示数据时需要把几张表的数据都显示出来。
视图的操作
1创建视图
视图名中应包含view,见名知意,否则无法区分视图与表,视图与表不可以重名
语法:
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view[(aliaslist)]
AS subquery
OR REPLACE表示如果视图已经存在则重新创建
FORCE表示创建视图而不管基表是否存在
NOFORCE表示只有基表存在的情况下才创建视图(默认情况)
view表示视图名
aliaslist表示列的别名列表(别名之间用逗号隔开,别名的个数需要和子查询中选择的字段或表达式的个数一致)
subquery表示子查询
视图的核心是子查询,在视图中,子查询可以包含复杂的SELECT语句,但不可以包含ORDER BY子句(如想排序,可以从视图中取数据时进行排序)
实例:
–需求:针对雇员表创建一个视图,隐藏其他数据,只显示雇员编号、姓氏和雇佣日期这三个字段的信息,且他们的别名分别设置为id、name和sdate
CREATE OR REPLACE VIEW emp_hiredate_view(id,name,sdate)
AS SELECT empno, ename, hiredate FROM emp
–需求:创建一个视图, 名称为EMPVU10, 使其包含EMP表中部门为10的职员的详细信息
create view empvu11 as
select * from emp where deptno =10;
–需求:假设现在要创建这样一个视图,该视图包括部门名称、部门平均薪水、最低薪水和最高薪水(别名分别是:dname、 minsal maxsal, avgsal ),而这些数据是通过对雇员表emp分组计算得来的。
CREATE VIEW dept_sum_vu(dname, minsal, maxsal, avgsal)
AS SELECT d.dname, MIN(e.sal), MAX(e.sal),AVG(e.sal)
FROM emp e, dept d
WHERE e.deptno = d.deptno
GROUP BY d.dname;
–注意,使用组函数时,需注意不能作为视图的列名,需要显示指定视图的字段名
查询视图
select * from 视图名
删除视图
drop view 视图名
简单视图DML
通过视图向基表中插入数据、删除数据、修改数据。但是不同的操作会有不同的限制,此处了解即可,因为一般不会对视图进行增删改