Oracle视图

一. 视图的特点

1. 集中用户感兴趣的数据. 通常用户只是对表中的某一部分数据感兴趣, 对其他的数据不是那么敏感, 所以用户通过视图就可以操  纵自己所需的数据. 对于开发人员来说, 也可以屏蔽一些数据.

2. 掩码数据库的复杂性. 通过视图机制将数据库设计的复杂性与用户屏蔽分开, 这样用户通过视图的操作就可以达到简化对数据库的复杂操作.

3. 简化用户的权限. 由于视图只是基表的逻辑表, 所以通过视图可以将视图的权限和基表权限分离.

4. 重组数据. 视图可以来自多个基表, 从而可以利用视图对数据进行进一步地分析.

二. 视图可以由以下任意一项组成:

1.        一个基表的任意子集

2.        两个或两个以上的基表的合集

3.        两个或两个以上基表的交集

4.        一个或者多个基表运算的结果集合

5.        另一个视图的子集.

三. 创建视图的基本语法:

CREATE[OR REPLACE][FORCE][NOFORCE]VIEW view_name

[(column_name)[,….n]]

AS

Select_statement

[WITH CHECK OPTION[CONSTRAINT constraint_name]]

[WITH READ ONLY]

说明:

view_name : 视图的名字

column_name: 视图中的列名

在下列情况下 , 必须指定视图列的名称

* 由算术表达式 , 系统内置函数或者常量得到的列

* 共享同一个表名连接得到的列

* 希望视图中的列名与表中的列名不同的时候

REPLACE: 如果创建视图时, 已经存在此视图, 则重新创建此视图, 相当于覆盖

FORCE: 强制创建视图, 无论的视图所依赖的基表否存在或是否有权限创建

NOFORCE: 只有基表存在且具有创建视图权限时, 才可以创建视图

WITH CHECK OPTION 指出在视图上所进行的修改都要符合select_statement 所指定的限制条件

WITH READ ONLY 只允许查看视图

视图的定义原则:
       1.
视图的查询可以使用复杂的 SELECT 语法,包括连接 / 分组查询和子查询;
       2.
在没有 WITH CHECK OPTION READ ONLY 的情况下,查询中不能使用
          ORDER BY
子句;
       3.
如果没有为 CHECK OPTION 约束命名,系统会自动为之命名,形式为 SYS_Cn;
       4.OR REPLACE
选项可以不删除原视图便可更改其定义并重建,或重新授予对象
         
权限。

四. 视图操作操作:

视图分为简单视图( 基于单个基表, 且不包含函数和数据分组操作 ) 和复杂视图( 基于多个基表或视图).

简单视图可以通过视图修改数据. 这些修改包括插入数据. 更新数据和删除数据. 但是对于复杂视图来说,

通过视图修改数据必须满足一定的规则.

在视图定义中没有设定READ ONLY 的前提下, 如果视图包含了下面的内容, 那么不能通过视图删除表中的数据:

* 分组函数, 如SUM,AVG,MIN,MAX 等

*GROUP BY 子句

* 包含了表达式

*ROWNUM 伪列

插入数据时, 除了满足上面的条件外, 还需要保证那些没有包含在视图定义中的基表的列必须允许空值. 如果在视图定义中还包含了WITH CHECK OPTION 子句, 那么对视图的修改除了前面的那些原则外, 还必须满足指定的约束条件.

个人认为,视图利于查询,不利于修改.

1.    查询视图: 可依赖于多个基表.

SELECT  *FROM view_name; /* 类似于查询表数据*/

2.    更新视图的前提:

没有使用连接函数, 集合运算和组函数. 创建视图的select 语句中没有集合函数且没有GROUP BY,ONNECT BY ,START WITH 子句及DISTINCT 关键字. 创建视图的SELECT 语句中不包含从基表列通过计算所得的列. 创建视图没有包含只读属性.

3.   插入数据

INSERT INTO  view_name VALUES();

4.   修改数据:

UPDATE  view_name SET …

若一个视图依赖于多个基本表, 则一次修改该视图只能修改一个基本表的数据.

5.   删除数据:

Delete from view_name where …

同样, 当视图依赖多个基表时, 不能使用此语句来删除基表中的数据. 只能删除依赖一个基表的数据.

6.   修改视图定义:

修改视图的好处在于, 所有相关的权限都依然存在. 语法同创建视图相同.

7.   删除视图:

DROP VIEW view_name;

  只有视图所有者和具备DROP VIEW 权限的用户可以删除视图。

删除视图的定义不影响基表中的数据。   
        视图被删除后,基于被删除视图的其他视图或应用将无效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle 视图(View)是一种虚拟表,是基于一个或多个基础表(Base Table)的查询结果集的命名表示。在 Oracle 数据库中,可以通过创建视图来简化复杂的查询,隐藏实际表的结构和数据,以及提供安全性和数据独立性。 以下是 Oracle 视图的创建语法: ```sql CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name [(alias1, alias2, ...)] AS select_statement; ``` 其中, - `OR REPLACE`:如果视图已经存在,则用新的定义替换。 - `FORCE`:如果基础表不存在或者视图依赖的对象无效,则仍然创建视图。 - `NOFORCE`:如果基础表不存在或者视图依赖的对象无效,则不创建视图。 - `view_name`:视图的名称。 - `alias1, alias2, ...`:列别名,可以省略。 - `select_statement`:查询语句,用于定义视图。 例如,创建一个简单的视图: ```sql CREATE VIEW emp_view AS SELECT empno, ename, job, sal FROM emp WHERE deptno = 10; ``` 在创建视图后,可以像查询表一样使用视图: ```sql SELECT * FROM emp_view; ``` 还可以在视图中使用聚合函数、子查询、连接等高级语法,例如: ```sql CREATE VIEW dept_sal_view AS SELECT d.dname, SUM(e.sal) AS total_sal FROM dept d, emp e WHERE d.deptno = e.deptno GROUP BY d.dname; ``` 在使用视图时,可以像查询表一样使用它: ```sql SELECT * FROM dept_sal_view; ``` 总之,Oracle 视图是一种非常方便的工具,可以简化复杂的查询,隐藏实际表的结构和数据,提供安全性和数据独立性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值