视图就是从一个或者几个实体表导出来的表。
在优秀的系统设计人员来讲,除了要提供满足于业务需要的各个数据表之外,还需要为开发做准备

它的优点:
能简化用户的操作;
视图使用户能以多种角度看待同一数据
对重构数据库提供了一定的程度的逻辑独立性
能够对机密数据提供安全保护
适当的利用视图可以更清晰的表达查询

它一定会在标准的开发之中出现,这样就可以实现系统的分工。
视图本身也属于oracle中的对象。
可以被查询删除,更新操作。


视图的定义
创建视图:
create view viewtable ()
force :表不存在也可以创建视图表
noforce:表存在才可以创建
or replace:不存在的话,就被替换

create view v_myview as
select * from emp where sal>2000;
如果视图创建不了,是因为权限问题,就
con sys/sys as dba
grant create view to 用户

创建完成后,查询视图:
select * from v_myview
只要查询视图,就实现与被封装sql 语句同样的功能

查看视图
select * from user_views

创建一张,只包含20部门的视图
create view v_emp20
as
select * from emp where deptno =20;

select * from v_emp20 ;

这代表视图很方便。


可以替换视图,用 or replace :
create or replace view v_myview (部门编号,部门名称,部门位置,人数,总工资)
as
select d.deptno , d. dname,d.loc ,
count (e.empno) , nvl(sum(e.sal),0)
from emp e, dept d
where e.deptno(+)=d.deptno
group by d. deptno,d.dname,d.loc

删除所有20部门雇员的信息
delete from v_myview where deptno =20;

select * from v_myview
select * from emp;
select * from dept;

视图就是完成查询,不要用作更新。


创建一张部门编号是20的emp表:
create or replace view v_emp20
as
select * from emp where deptno=20;

update v_emp20 set deptno=40 where empno=7369
select * from v_emp20

创建字段不被修改:
重新创建视图
create or replace view v_emp20
as
select * from emp where deptno=20
with check option constraint v_emp20_CK

update v_emp20 set ename='史密斯' where empno=7369

将视图变成只读视图:
create or replace view v_emp20
as
select * from emp where deptno=20
with read only ;

update v_emp20 set ename='史密斯' where empno=7369
因为是只读视图,出现错误42399。无法对只读视图执行DDL操作。

查找视图,删除视图:
select * from user_views;
drop view v_emp20;
drop view v_myview:

使用视图可以合理的分工。