目录
一、视图的概念:
是一个从单张或多张基础数据表或其他视图中构建出来的虚拟表。同基础表一样,视图中也包含了一系列带有名称的列和行数据,但是数据库中只是存放视图的定义,也就是动态检索数据的查询语句,而并不存放视图中的数据,这些数据依旧存放于构建视图的基础表中,只有当用户使用视图时才去数据库请求相对应的数据,即视图中的数据是在引用视图时动态形成的。因此视图中的数据依赖于构建视图的基础表,如果基本表中的数据发生了变化,视图中相应的数据也会跟着变化。
视图本质上是:一个查询语句,是一个虚拟表,不存在的表,查看视图就是查看视图对应的SQL语句。
二、视图的好处:
简化用户操作:视图可以使用户将注意力集中在所关心的数据上,而不需要关心数据表的结构、与其他表的关联条件以及查询条件等。
对机密数据提供安全保护:有了视图就可以在设计数据库应用系统时,对不同的用户定义不同的视图,避免机密数据出现在不应该看到这些数据的用户视图上。这样视图就自动提供了对机密数据的安全保护功能。
三、代码练习:
-- 创建单表视图:
create or replace view myview01-- 创建或替换视图,没有就创建,有就替换
as
select empno,ename,job,deptno
from emp
where deptno =20
with check option;-- 往视图中插入数据时检查是否符合条件,不符合的不能插入
-- 在视图中插入数据
insert into myview01 (empno,ename,job,deptno)values(9999,'lili','CLERK',20);
insert into myview01 (empno,ename,job,deptno)values(8888,'nana','CLERK',30);
insert into myview01 (empno,ename,job,deptno)values(7777,'feifei','CLERK',30);-- 设置检查之后不能插入到视图中
-- 查看视图
select * from myview01;
-- 创建多表视图
create or replace view myview02
as
select e.empno,e.ename,e.sal,d.deptno,d.dname
from emp e
join dept d
on e.deptno=d.deptno
where sal>2000;
-- 查看视图
select * from myview02;
-- 创建统计视图
create or replace view myview03
as
select e.deptno,d.dname,avg(sal),min(sal),count(1)
from emp e
join dept d
using(deptno)
group by e.deptno;
-- 查看视图
select * from myview03;
-- 创建基于视图的视图
create or replace view myview04
as
select * from myview03 where deptno=20;
-- 查看视图
select * from myview04;
-- 查看表
select * from emp;