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. 用 #include “filename.h” 格式来引用非标准库的头文件

    用 #include “filename.h” 格式来引用非标准库的头文件(编译器将 从用户的工作目录开始搜索) #include <iostream> /* run this progr ...

  2. (转)x264参数中文详解(X264 Settings)

    0 解释x264命令可选项的用途和使用方法.同执行 x264 --fullhelp 显示顺序.本文主要翻译:mewiki.project357.com/wiki/X264_Settings,同时参考d ...

  3. spark 安装配置

    最佳参考链接 https://opensourceteam.gitbooks.io/bigdata/content/spark/install/spark-160-bin-hadoop26an_zhu ...

  4. mac Virtualbox Ubuntu 设置共享目录

    如果要用VirtualBox自带的共享文件夹功能,必须先安装Guest Additions.安装方法:置顶的菜单条->devices->Install Guest Additions.点击 ...

  5. Android学习笔记——Menu(一)

    背景: Android3.0(API level 11)开始,Android设备不再需要专门的菜单键. 随着这种变化,Android app应该取消对传统6项菜单的依赖.取而代之的是提供anction ...

  6. C# Asp.net 制作一个windows服务

    那下面就来说说如何制作一个服务来 实现开机自动启动,每隔一段时间向student表中插入数据. 步骤:  1)   新建项目 ---> Windows 服务 2) 拖放Times控件 工具箱中 ...

  7. bat、cmd、dos窗口:后台调用,不显示黑色的控制台dos(命令行)窗口

    建立一个windows的vbs脚本文件,内容类似如下:注意末尾的参数0 createobject("wscript.shell").run "VBoxheadless.e ...

  8. 做BS开发,你应该知道的一些东西

    界面和用户体验(Interface and User Experience) 知道各大浏览器执行Web标准的情况,保证你的站点在主要浏览器上都能正常运行.你至少要测试以下引擎:Gecko(用于Fire ...

  9. mongodb查询内嵌文档

    mongodb查询内嵌文档   假设有这样一个文档: db.XXX.remove(); db.XXX.insert({"id":1, "members":[{& ...

  10. GLSL/C++ 实现滤镜效果

    入门效果之浮雕 "浮雕"图象效果是指图像的前景前向凸出背景.常见于一些纪念碑的雕刻上.要实现浮雕事实上很easy.我们把图象的一个象素和左上方的象素进行求差运算.并加上一个灰度.这 ...