第十五章视图课堂笔记和练习

– 视图

  • 概念:
    – 限制其它用户对数据库表的访问,因为视图可以有选择性的显示数据库表的一部分;
    – 容易实现复杂的查询;
    – 对于相同的数据可以产生不同的视图;

    --                          简单视图
                一个        没有       没有        可以
    
        --    基表数量    包含函数  包含数据组  通过视图实现 DML 操作
    
             一个或多个      有          有          不一定
    
    --                          复杂视图
    
  • 创建视图

    --  创建简单视图
    --  创建一个视图v_emp10,通过该视图只能查看10号部门的员工编号,员工姓名,职位。 
        --  or replace 修改视图   
        create or replace view  empvu10
            as select empno 员工编号, ename 员工姓名, job 职位
                 from emp
                where deptno = 10;
    
    
    --  创建复杂视图
    --  创建一个视图,通过该视图可以查看每个部门的名称,最低工资,最高工资,平均工资
        CREATE VIEW dept_sum_vu
        (name, minsal, maxsal, avgsal)
               AS SELECT d.dname, MIN(e.sal), MAX(e.sal),
                         AVG(e.sal)
                   FROM emp e, dept d
                  WHERE e.deptno = d.deptno
                  GROUP BY d.dname;
    
    
        --  授权:需在管理员命令窗口执行
        grant create view to scott;
    
    --  使用视图
        select  from empvu10;
        select  from dept_sum_vu;
    
  • 修改视图 基于视图作DML操作
    – 注意: 修改视图,仅允许修改视图中可见数据

        create or replace view  empvu10
            as select empno 员工编号, ename 员工姓名, job 职位
                 from emp
                where deptno = 10;
    --  修改数据 job = PRESIDENT 的job改为国王
        update empvu10 set 职位='国王' where 职位='PRESIDENT';
    
    --  插入数据视图
        insert into empvu10 values(1234,'哈哈', '技术员'); 
        select  from emp;   
        select e., e.rowid from emp e;
    
    
    --  WITH CHECK OPTION 子句  不能修改限制条件
        CREATE OR REPLACE VIEW empvu20
            AS SELECT 
                 FROM emp
                 WHERE deptno = 20
        WITH CHECK OPTION;  
    
        select  from empvu20;
    
        update empvu20 set deptno = 10 where empno = 7788;--违规
    
    --  WITH READ ONLY 子句  视图只读,无法执行DML操作
        CREATE OR REPLACE VIEW empvu20
            AS SELECT 
                 FROM emp
                 WHERE deptno = 20
        WITH READ ONLY;  
    
        select  from empvu20;
    
        update empvu20 set deptno = 10 where empno = 7788;--违规
    
  • 使用视图

       select * from v_emp10;
    
  • 删除视图

       delete view empvu10;    
    

– 数据字典

select * from user_views;--查看当前用户所有的视图
select * from user_updatable_columns;--查询可做DML操作的列
select * from user_objects;--查看当前用户所有的对象

select * from user_tables; -- 查询表

select * from user_constraints;--查询约束
select * from user_cons_columns; --查询约束及相关列

select * from user_indexes;--查询当前用户所有的索引
select * from user_ind_columns;--查询当前用户的所有索引,及相关列

猜你喜欢

转载自blog.csdn.net/bb_code_exchange/article/details/81365640