一、视图介绍
1.视图实际是一个或多个表上的预定义查询,这些表称为基表。从视图中检索信息与从表中检索信息方法完全相同:只需要简单地在SELECT语句的FROM子句中使用视图即可。通过视图可以对基表进行DML操作。
注意:视图中并不存储数据,它们只会访问基表中的行。
如下:
其中视图基于基表1、基表2、基表3三张基表,所以通过SELECT语句对视图操作,就可以实现对三张基表的操作,而且视图中的数据全部是来源于三张基表。
2.视图具有以下优点:
(1)限制用户只能通过视图检索数据。这样就可以对最终用户屏蔽创建视图所基于的底层基表。
(2)可以将复杂查询编写为视图。这样就可以对最终用户屏蔽一定的复杂性。
(3)限制某个视图只能访问基表中的部分特定数据。这样可以实现另外一层安全性,并且可以对最终用户屏蔽部分行。
3.视图有两种基本类型:
(1)简单视图:包含一个子查询,它只从一个基表中检索数据。
(2)复杂视图:包含一个子查询,它具有以下特点
第一:从多个基本表检索数据
第二:使用group by或distinct子句对行进行分组
第三:包含函数调用
4.创建视图语法格式
create [or replace] [force | noforce] view 视图名 [(别名[,别名]…)]
as 子查询 [with{check option | read only} [constraint 约束名]]
上述语法中中括号内的不是必写内容:
(1)or replace——如果所建的视图已经存在,Oracle会重新创建这个视图并覆盖已存在的视图,如果不写or replace,那么如果要创的视图已存在,则不会创建,所以如果写上or replace,那么不管是否已存在都创建视图;
(2)force——不管所用的表(as后面的select语句所查询的表)是否存在,Oracle都会创建这个视图;
(3)noforce——只有当所引用的表(as后面的select语句所查询的表)都存在,Oracle才会创建这个视图;
(4)别名——为视图所产生的列定义的别名;
(5)with check option——所插入或修改的数据行必须满足视图所定义的约束条件;
(6)with read only——保证在该视图上不能进行任何DML操作。
【注意】子查询中不能包含order by。
比如:创建一个简单的视图
create or replace noforce view v_emp (“empno”, “ename”, “sal”, “hiredate”, “deptno”) as select empno, ename, sal, hiredate, deptno from emp where deptno = 10
例1:练习创建视图
解:如下student表:
对其创建视图,注意下图中的命令:
查询该视图: