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 ;

Oracle Schema Objects——View的更多相关文章

  1. Oracle Schema Objects(Schema Object Storage And Type)

    One characteristic of an RDBMS is the independence of physical data storage from logical data struct ...

  2. Oracle Schema Objects——Tables——TableType

    Oracle Schema Objects Object Tables object type An Oracle object type is a user-defined type with a ...

  3. Oracle Schema Objects——PARTITION

    Oracle Schema Objects 表分区 表- - 分区( partition )TABLE PARTITION 一段时间给出一个分区,这样方便数据的管理. 可以按照范围range分区,列表 ...

  4. Oracle Schema Objects——Index

    索引主要的作用是查询优化. Oracle Schema Objects 查看执行计划的权限:查看执行计划plustrace:set autotrace trace exp stat(SP2-0618. ...

  5. Oracle Schema Objects——伪列ROWID Pseudocolumn(ROWNUM、ROWID)

    Oracle Schema Objects Oracle Schema Objects——Tables——Oracle Data Types Oracle伪列 在Oracle数据库之中为了实现完整的关 ...

  6. Oracle Schema Objects——Synonyms

    Oracle Schema Objects 同义词 同义词 = 表的别名. 现在假如说有一张数据表的名称是“USER1.student”,而现在又为这张数据表起了一个“USER1”的名字,以后就可以直 ...

  7. Oracle Schema Objects——Sequences(伪列:nextval,currval)

    Oracle Schema Objects 序列的作用 许多的数据库之中都会为用户提供一种自动增长列的操作,例如:在微软的Access数据库之中就提供了一种自动编号的增长列(ID列).在oracle数 ...

  8. Oracle Schema Objects——Tables——Oracle Data Types

    Oracle Schema Objects Oracle Data Types 数据类型 Data Type Description NUMBER(P,S) Number value having a ...

  9. Oracle Schema Objects——Tables——TableStorage

    Oracle Schema Objects Table Storage Oracle数据库如何保存表数据? Oracle Database uses a data segment in a table ...

随机推荐

  1. Intellij IDEA Module 的Language Level的问题

    最近从github上fork了张开涛的Shiro代码,IDE是Intellij IDEA.发现无论是Project还是Module,默认的Language Level都是JDK 1.5,而且每次修改都 ...

  2. 动态调用WCF不添加服务(svcutil.exe)

    记录下 首先用svcutil.exe把指定wcf接口的信息下载下来. 生成代理类 比如说接口地址为 http://localhost:6666/Service1.svc 以管理员身份打开cmd 执形 ...

  3. DLL接口自动化测试总结

    1. DLL接口测试方法介绍 在最近测试的项目中,系统给业务端提供DLL文件,业务端通过DLL文件中的C++接口实现系统功能,这就需要对DLL中的C++接口进行详细功能测试. 本文主要介绍项目测试中使 ...

  4. XLua系统学习

    官方网站:https://github.com/Tencent/xLua 学习手册:http://manual.luaer.cn/ 技术博客: http://blog.csdn.net/column/ ...

  5. win8安装msi出现提示2503 2502的错误代码

    安装TortoiseSVN-1.9.5.27581-x64-svn-1.9.5.msi时出现错误,网上查看原因是权限不够造成的 解决方法: 解决方法: 1.鼠标移到桌面左下角->右键(或者直接: ...

  6. android webView不简单

    手机屏幕大小非常伤程序猿 励志成为一名Javaproject师的我.真的被它伤到了,不仅由于webView的强大.并且这个内容适合各样屏幕大小问题. 想当年苹果project师嘲笑安卓project师 ...

  7. 添加app第一次启动页面

    一.添加几个成员变量 @interface hDisplayView ()<UIScrollViewDelegate> { UIScrollView *_bigScrollView; NS ...

  8. python语言简介、解释器、字符编码介绍

    一.为什么要选择python作为学习语言: 各个语言的对比: C和python.java.C#等 C语言:代码编译得到机器码,机器码在处理器上直接执行,每一条指令控制cpu工作 其他语言:代码编译得到 ...

  9. 实例:用类来写一个 memcached 启动脚本

    [root@localhost ~]$ yum install -y memcached #!/usr/bin/env python #-*- coding:utf-8 -*- import os i ...

  10. m4a文件在iOS上的流媒体播放

    Date: 2016-03-23 Title: m4a文件在iOS上的流媒体播放 Tags: m4a, mp4, iOS, Android URL: m4a-streaming-play-on-mob ...