十七、Oracle学习笔记:视图操作和表复制

=======================================================================================================
视图:
1:为什么要使用视图
  (1)简化复杂查询
  (2)限制某些数据的访问。安全
2:视图是一张虚拟的表,对应了一个查询语句。操作视图里的数据,相当于
  操作基表中的数据。
3:视图可以进行DML
  (1)对视图进行insert,基表中一定会增加数据,视图中不一定显示。
  (2)复杂视图不能进行DML
  (3)对视图进行insert时,需要考虑基表中其他字段的非空约束。
  (4)delete,update只能操作视图中可见的数据。

=======================================================================================================

一、视图
1.概念
    视图其实是一张虚表,对应一个select语句,视图其实是一张表中的部分数据映射(投影)视图关键字view,对应的select语句中的表叫基表
2.作用
    (1)可以保护表中的其他数据
    (2)当频繁的操作一个查询语句时,将这个查询语句创建成视图。
3.视图的分类
    (1)简单视图
         对应的select语句是一个普通的查询语句,没有聚合函数,其他函数,以及子查询
    (2)复杂视图
         select语句中含有函数,排序,子查询等
    (3)连接视图
         select语句中设计到多张表
4.视图的创建

--格式:视图的创建
  create [or replace] view viewName as subQuery
--格式:视图的删除
  drop view viewName
--有些用户没有视图创建的权限必须授权,使用DBA进行授权:
   grant create view to scott
--练习:创建视图,要求包含10号部门的员工的所有信息        
  create or replace view v_emp_10 as select * from emp where deptno=10;
--查看视图结构:desc view_name
   desc v_emp_10;
--练习:将每个部门的平均工资最高工资还有工资之和以及部门号,创建成一个视图
  create or replace view v_emp_d as select deptno,avg(sal),max(sal),sum(sal) from emp group by deptno;


5:视图也能进行增删改DML操作,对视图的DML操作,其实就是对视图的DML操作
        原则1:视图中没有的字段,基表中的字段有非空约束,此时不能进行insert
        原则2:一个复杂视图,不能进行DML操作
        原则3:连接视图不能进行DML操作

--练习:向视图v_emp_10添加一条数据,9100,'zhangsan','clerk','11-11-16',7369,3000,100,10/20
  insert into v_emp_10 values(9100,'zhangsan','clerk',7369,'11-11月-16',3000,100,10);
  insert into v_emp_10 values(9101,'lisi','clerk',7369,'11-11月-16',3000,100,20);
--通过上述案列,视图中可能查询不到视图中添加的数据
        
   update v_emp_10 set sal=4000 where ename='zhangsan';
   update v_emp_10 set sal=4000 where ename='lisi';
--第二条数据执行不成功,因为视图中没有
        
--练习:通过视图删除李四的信息
  delete from v_emp_10 where ename='lisi';
        
--总结:可以DML视图中的任何数据,但是视图中没有的数据,可能insert,不能delete,update.

               
6.视图与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;
--练习:向视图中插入数据
  9102,'wangwu','superman',2000,20;   --成功
  9103,'laoliu','superhaha',2000,30;  --失败,报ORA-01402: 视图 WITH CHECK OPTION where 子句违规

7.视图与with read only;
     

--练习:创建v_emp_30视图,为30部门的所有员工信息,设置为只读
  create view v_emp_30 as select * from emp where deptno=30 with read only;
          

二、表复制

 create table emp_100 as select * from emp;


         

猜你喜欢

转载自blog.csdn.net/qq_38741971/article/details/81429315