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. mysql 从sql存储文件恢复数据库乱码

    场景一: 一台电脑上导出的sql文件到另一台电脑上恢复数据库,汉字全部是乱码,然后可能还有部分数据提示超长. 场景二: 拿到的sql文件不是原始的导出sql文件,只有表结构和表数据,出现的问题和场景一 ...

  2. par函数的bg参数-控制图片的背景色

    bg 参数用于控制图片的背景色,默认为白色 代码示例: par(bg = "pink") plot(1:5, 1:5, main = "title", xlab ...

  3. php多语言截取字符串函数

    <?php header("Content-Type:text/html;charset=utf-8"); function msubstr($str, $start = 0 ...

  4. Java基础--生成验证码

    HTML <%@ page language="java" contentType="text/html; charset=UTF-8" pageEnco ...

  5. kafka学习之-配置详解

    # Licensed to the Apache Software Foundation (ASF) under one or more # contributor license agreement ...

  6. Java动态代理-->Spring AOP

    引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓“登高必自卑,涉远必自迩”.以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系列分别介绍这些Jav ...

  7. Systemd on ubuntu

    何为 systemd? systemd 是一个 Linux 下的系统和会话管理器,与 SysV 和 LSB 启动脚本兼容.systemd 提供了积极的并行处理能力,使用套接字(socket)和 D-b ...

  8. error C2275: 'SOCKET' : illegal use of this type as an expression

    在VC中编译xxx.c文件出现错误error C2275 illegal use of this type as an expression 问题在于C99之前要求所有的声明必须放在函数块的起始部分, ...

  9. 07python之字符串的常用方法

    字符串作为python中常用的数据类型,掌握字符串的常用方法十分必要. 常用知识点: 1.字符串的3种格式化方法 2.字符串的strip()方法 3.字符串的join()方法 4.字符串可以切片 1. ...

  10. Discuz! X2验证码的产生及验证

    http://www.mcqyy.com/wenku/jiaocheng/jzjc/cjc/106729.html http://blog.sina.com.cn/s/blog_4acbd39c010 ...