视图:其实是一个虚表,对应一个select语句.
1.视图其实是表中数据映射(投影)
视图关键字view,对应的select语句中的表叫基表2:作用:
1)可以保护表中其他数据2)当频繁的操作一个语句时,将这个查询语句创建成视图,便于操作
3:视图的分类
(1)简单视图对应的select语句是一个普通的语句,没有聚合函数,其他函数,以及子查询
(2)复杂视图:
select语句中含有函数、排序、子查询的视图
(3)连接视图
select语句中涉及到多张表
4:视图的创建:
create [or replace] view view_name as subQuery '语句';子查询练习:创建视图 v_emp_10 对应的是10号部门员工信息
create or replace view v_emp_10 as select * from emp where deptno=10 ;
desc view_name
5:视图的创建:
有些用户没有创建视图的权限,必须授权使用DBA进行授权
***1)先进入system 1234 数据库 ,2)再输入授权语句
授权语句: grant create view to 用户名(scott)
grant create view to v_emp_10
6:视图也可以进行DML操作 *增删改
原则1:视图中没有的字段,基表中的字段有非空操作,此时不能进行insert原则2:复杂视图不能进行DML操作
原则3:连接视图不能进行DML操作
1)查询基表: 向视图插入数据,基表也会有数据!
select * from emp where deptno=10
select * from v_emp_10
再插入李四的数据, 向视图里。
insert into v_emp_10 values( 9101,'李四','clerk',7369,'11-11月-16',3000,100,10);
查询基表:视图与基表都会有数据
select * from emp where deptno=10
select * from v_emp_10
2)通过视图 v_emp_10 修改张三工资,基表和视图都改变
练习:通过视图 v_emp_10 修改张三工资,基表和视图都改变
update v_emp_10 set sal=4000 where ename='张三'
select * from emp
select * from v_emp_10
练习:通过视图删除李四的信息
delete from v_emp_10 where ename='李四'
select * from v_emp_10 李四已删除
select * from emp where deptno=10 李四已删除
总结:可以DML增删改视图中的任何数据,视图中没有的数据,可能insert,不能delete,update
7:视图与with check option对视图做了限制
当视图对应的select语句中使用了with check option时,就对视图做了限制,只能DML视图中的数据。练习:创建视图v_emp_20对应的20号部门的员工编号,姓名,职位,月薪,部门号
create or replace view v_emp_20 as
select empno,ename,job,sal,deptno from emp where deptno=20 with check option; 对20号进行了限定
8:视图与with read only;
练习:创建v_emp_30 视图,为30号部门的所有员工信息,设置为只读create view v_emp_30 as
select * from emp where deptno=30 with read only;
insert into v_emp_20 values(9102,'王五','superman',2000,20)//只能读,不能插入
9. 复制表:
create table copy-table as select * from emp