• Oracle Schema Objects——View


     

    Oracle视图View

    普通视图、物化视图

    • 视图(视图不包含数据,不是段对象,不占用空间,只是一个代码.
    • 作用:
      • 简化SQL
      • 为安全,不暴露表的名称
    • 视图 DML
      • 视图允许DML操作,可以删除,插入数据,更新数据,但是需要满足特定的条件。
    • 视图 -- 物化视图是段对象,会占用物理空间
      • 将查询的结果集保存下来,用于后续的查询,提高查询效率。
      • 和普通视图不同,物化视图是一个段对象,占用物理空间。

    用途

    提高查询效率

    数据复制


     

    SQL语句

    SQL> select d.dname,e.ename from emp e,dept d where e.deptno=d.deptno;

    创建视图

    SQL> create view emp_info as select d.dname,e.ename from emp e,dept d where e.deptno=d.deptno;

    查看驶入

    SQL> select * from emp_info;

    创建物化视图:

    SQL> create materialized view mvt as select * from t where id > 1;

    物化视图的一般用法详见链接: <http://www.itpub.net/thread-1614812-1-1.html>

    • 视图是从一个或几个实体表(或视图)导出的表。它与实体表不同,视图本身是一个不包含任何真实数据的虚拟表
    • 数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的实体表中。所以实体表中的数据发生变化,从视图中查询出的数据也就随之改变了。从这个意义上讲,视图就像一个窗口,通过它可以看到数据库中自己感兴趣的数据及其变化。

     

    视图的优点

    • 视图能够简化用户的操作;
    • 视图使用户能以多种角度看待同一数据;
    • 视图对重构数据库提供了一定程度的逻辑独立性;
    • 视图能够对机密数据提供安全保护;
    • 适当的利用视图可以更清晰的表达查询;

     

    查询视图的数据字典:user_views

    SELECT * FROM user_views;

    创建视图语法

    CREATE [FORCE | NOFORCE] [OR REPLACE] VIEW 视图名称 [(别名1,别名2,...)]

    AS

    子查询 ;

    语法参数:

    FORCE

    表示要创建视图的表不存在也可以创建视图;

    NOFORCE

    (默认)表示要创建视图的表必须存在,否则无法创建;

    OR REPLACE

    表示视图的替换,如果创建的视图不存在则创建新的,如果视图已经存在,则将其进行替换。

    scott用户创建用户权限不足,切换到sys用户,

    执行:GRANT CREATE VIEW TO scott;授予scott用户创建视图的权限.

    创建一张基本工资大于2000的雇员信息的视图

    CREATE VIEW v_view AS SELECT * FROM emp WHERE sal>2000;

    SELECT * FROM v_view;

    创建一张只包含20部门雇员信息的视图

    CREATE VIEW v_emp20

    AS

    SELECT * FROM emp WHERE deptno=20 ;

    替换v_myview视图 —— 定义新视图,可以显示每个部门的详细信息。

    CREATE OR REPLACE VIEW v_myview

    AS

    SELECT d.deptno,d.dname,d.loc,

    COUNT(e.empno) count,NVL(ROUND(AVG(sal),2),0) avg,NVL(SUM(sal),0) sum,

            NVL(MAX(sal),0) max,NVL(MIN(sal),0) min

    FROM emp e,dept d

    WHERE e.deptno(+)=d.deptno

    GROUP BY d.deptno,d.dname,d.loc ;

    为视图中查询的列起别名,将列的名称分别变为中文.

    CREATE OR REPLACE VIEW v_myview

    (部门编号,部门名称,位置,人数,平均工资,总工资,最高工资,最低工资)

    AS

    SELECT d.deptno,d.dname,d.loc,

    COUNT(e.empno) count,NVL(ROUND(AVG(sal),2),0) avg,NVL(SUM(sal),0) sum,

            NVL(MAX(sal),0) max,NVL(MIN(sal),0) min

    FROM emp e,dept d

    WHERE e.deptno(+)=d.deptno

    GROUP BY d.deptno,d.dname,d.loc ;

     

     

    更新视图

    • 视图本身是针对于多张数据表映射的结果,但是在默认情况下建立的视图,也是可以进行更新操作的。

    1.更新简单视图(单表映射视图)

    定义只包含20部门雇员信息的视图

    CREATE OR REPLACE VIEW v_emp20

    AS

    SELECT empno,ename,job,sal,deptno FROM emp WHERE deptno=20 ;

    向v_emp20视图之中增加一条新数据

    INSERT INTO v_emp20(empno,ename,job,sal,deptno) VALUES (6688,'wendy','CLERK',1900,20) ;

    COMMIT ;

    对视图执行修改操作

    UPDATE v_emp20 SET ename='MLDNJAVA',job='MANAGER',sal=2300 WHERE empno=6688 ;

    COMMIT ;

    删除v_emp20视图中的数据

    DELETE FROM v_emp20 WHERE empno=6688 ;

    COMMIT ;

    2、更新复杂视图

    创建一个视图,要求显示所有20部门中的雇员编号、姓名、职位、基本工资、部门编号、部门名称、位置

    CREATE OR REPLACE VIEW myview AS

    SELECT e.empno,e.ename,e.job,e.sal,d.deptno,d.dname,d.loc

    FROM emp e,dept d

    WHERE e.deptno=d.deptno AND d.deptno=20 ;

    向myview视图之中增加一条数据

    INSERT INTO myview (empno,ename,job,sal,deptno,dname,loc) VALUES (6688,'魔乐','CLERK',2000,50,'教学','北京') ;

    修改myview视图中的数据

    UPDATE myview SET ename='史密斯',sal=5000,dname='教学' WHERE empno=7369 ;

    删除myview视图中的数据

    DELETE FROM myview WHERE empno=7369 ;

    删除视图之中所有20部门雇员的信息

    DELETE FROM myview WHERE deptno=20 ;

     

    WITH CHECK OPTION子句

    • 在创建视图的时候有时候需要使用一些WHERE子句做一些条件的限制,但是默认情况下的视图创建完成之后,是可以通过视图去修改在WHERE子句之中所使用的字段内容的,而在此时就需要通过WITH CHECK OPTION子句来保证视图的创建条件不被更新。
    • WITH CHECK OPTION子句

    CREATE [FORCE | NOFORCE] [OR REPLACE] VIEW 视图名称 [(别名1,别名2,...)]

    AS

    子查询 [WITH CHECK OPTION [ CONSTRAINT 约束名称] ];

     

    WITH READ ONLY子句

    • 让视图中所有字段不可更新,则可以通过WITH READ ONLY子句控制。
    • WITH READ ONLY子句

    CREATE [FORCE | NOFORCE] [OR REPLACE] VIEW 视图名称 [(别名1,别名2,...)]

    AS

    子查询 [WITH CHECK OPTION [ CONSTRAINT 约束名称] ]

    [WITH READ ONLY] ;

     

    删除视图

    • DROP VIEW语法
      • DROP VIEW 视图名称 ;
    • 删除v_myview视图
      • DROP VIEW v_myview ;
  • 相关阅读:
    RHEL7: How to configure a rc-local service
    安装 jemalloc for mysql
    aws rhel 7 安装GUI ,配置VNC
    官方推荐的MySQL参数设置值
    Linux HugePages及MySQL 大页配置
    Linux Transparent Huge Pages 对 Oracle 的影响
    Linux的Transparent Hugepage与关闭方法
    Linux HugePages 配置与 Oracle 性能关系说明
    How To Change Log Rate Limiting In Linux
    MySQL 8.0窗口函数
  • 原文地址:https://www.cnblogs.com/thescentedpath/p/view.html
Copyright © 2020-2023  润新知