特点: 连接视图是指基于多个表所创建的视图,即定义视图的查询是一个连接查询。使用连接视图的主要目的是为了简化连接查询 [只能更新键保留表]
create or replace view view_emp as select e.*,d.dname from emp
e,dept d where e.deptno=d.deptno;
使用 scott 身份登录,创建视图 emp 表的简单视图
create view view_emp as select * from emp;
select * from view_emp;
update view_emp set sal=3200 where sal=3000
delete view_emp where rownum=1
5. 创建复杂视图
特点: 复杂视图是指包含函数、表达式或分组数据的视图,主要目的是为了简化
查询
create or replace view view_emp as select count(*) 人数,avg(sal+nvl(comm,0)) 平均工资,deptno 部门编号 from emp group by deptno;
6. 创建强制视图
特点:正常情况下,如果基表不存在,创建视图就会失败。但是可以使用 FORCE选项强制创建视图(前提是创建视图的语句没有语法错误),但此时该视图处于失效状态,调用会出错,直到这个基表已经存在
create or replace force view view_test
as select * from myemp;
select * from myemp; --错误
create table myemp --创建myemp表
as
select * from emp ;
select * from myemp; --正确
视图上的 DML 语句有如下限制:
1)只能修改一个底层的基表
2) 如果修改违反了基表的约束条件,则无法更新视图
3)如果视图包含连接操作符、DISTINCT 关键字、集合操作符、聚合函数或
4)GROUP BY 子句,则将无法更新视图
5)如果视图包含伪列或表达式,则将无法更新视图
b) 内嵌视图
概述:
内嵌视图就是嵌入到父查询中的查询,能够在任何可以使用表名称的地方使用内嵌视图又称为嵌套查询
嵌视图可以出现在 select 语句的 from 子句中,以及 insert into、update甚至是 delete from 语句中。内嵌视图是临时的,它只存在于父查询的运行期间
例:
select * from (select e.*,rownum rn from emp e) tab
where rn>=5 and rn<=10;
其中: select e.*,rownum rn from emp e 就是一个内嵌视图,临时有效
c) 物化视图