在Oracle中每一次查询与关联都是生成了一个新的表,这个表在一次查询之后没有办法保存下来,我们引入了视图的概念,通过视图把多张单纯表动态的组合到一张表中来达到上述效果,动态的组合是指原表或者视图一个改变的时候另一个表也随之改变。
视图介绍
视图概念:视图是一张虚拟逻辑表,把多张单独的表动态组合成一张表并存储到数据库中
视图优点:
简化用户处理数据方式,可以使用简单的查询得到复杂插叙你的结果
着重于特定数据,避免一些敏感数据或者无用的数据查询出来
提供简单有效的安全机制,定制不同用户对数据的访问权限
可以将视图的数据导入到其他程序
视图分类:视图分为简单视图和复杂视图
简单视图只能从单表获取数据,复杂视图从多表获取数据
简单视图不包含函数和数据组,复杂视图包含
简单函数可以实现DML操作,复杂视图不可以
如果简单视图创建使用with read only,该视图不能进行DML操作
创建视图
注:如果在scoot中想要拥有创建视图的权限,需要赋予权限,即使用系统用户执行grant create view to scott;语句(注意赋予语句后需要commit)。
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name
[(alias[, alias]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY]
OR REPLACE 若所创建的视图已经存在,ORACLE自动重建该视图;
FORCE 不管基表是否存在ORACLE都会自动创建该视图;
NOFORCE 只有基表都存在ORACLE才会创建该视图:
alias 为视图产生的列定义的别名;
subquery 一条完整的SELECT语句,可以在该语句中定义别名;
WITH CHECK OPTION 插入或修改的数据行必须满足视图定义的约束;
WITH READ ONLY 该视图上不能进行任何DML操作。create view empv30(empno,ename,sal) as select empno,ename,sal from emp where deptno=30;
创建一个empv30里面写empno,ename,sal
create view emp1 (rn,ename,job,sal) as (select rownum rn,a.* from (select ename,job,sal from emp order by sal) a);
将emp表排序结果存到视图 emp1中,随后使用select * from emp1 where rn>4 and rn<11;获取5-10行
查询视图
创建的视图的查询方法和正常的表的查询方法相同即直接使用select语句。select * from empv30;
修改视图
修改视图主要是通过Oracle创建视图时候的一个属性即or replace来重新创建同名视图来达到修改视图的效果。
删除视图
删除视图的方法和正常删除表的效果相同,通过drop来删除表。即 drop view view_name;。drop view empv30;