视图是从一个表或视图导出的表,也可以是从多个表或视图导出的表。视图是一个虚表,数据库不对视图所对应的数据进行实际存储,只存储视图的定义,对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基表。
视图一旦被定义以后就可以像表一样被查询、修改、删除和更新。
使用视图有如下优点:
(1)为用户集中数据,简化用户的数据查询和处理。有时我们所需要的数据可能分散在几个不同的表中,定义视图可以将它们集中在一起,从而方便我们对数据的查询和处理。
(2)屏蔽数据库的复杂性。在使用数据时,使用户不必了解复杂的数据库表结构。
(3)简化用户的权限管理。我们有时候可能会授予某一用户只能查看对应表的某些列,这是相当麻烦的,有了视图后,我们就可以把能够查看的列抽出来建立对应的视图,然后赋予用户使用视图的权限。
(4)便于数据共享。各不同的用户不必都保存自己的数据,同样的数据只需保存一次。
1、使用create view语句创建视图:
语法格式:
create [or replace] [force | noforce] view [schema.]viewName[(columnName[,...n])]
as selectStatement [with check option[constraint constraintName]]
[with read only]
--or replace表示如果对应名称的视图已经存在,则重建该视图,即把原来的视图销毁,再重建对应的视图。
--force表示强制创建一个视图,无论视图的基表是否存在或拥有者是否有权限。
--columnName是视图中包含的列,可以有多个列名。若使用与源表或视图相同的列名,则不必给出columnName,但以下情况则必须指出列名:
--(1)由算术表达式、系统内置函数或者常量得到的列
--(2)共享同一个表名得到的列
--(3)希望视图中的列名与基表的列名不同的时候
--selectStatement表示用于创建视图的select语句,可在select语句中查询多个表或视图。
--with check option指出在视图上所进行的修改都要符合selectStatement所指定的限制条件,这样可以保证数据修改后,仍可通过视图查看修改的数据。
--with read only指定视图中不能进行删除、更新和插入操作,只能进行检索操作。
示例代码:
create or replace view personView as select name,sex from person with read only; --对person表的name和sex列建立只读视图。
create or replace view personView(sex,平均年龄) as select sex, avg(age) from person group by sex with check option;
--对person表中的性别进行分组,得出男女的平均年龄,并建立视图,视图的列名改为sex和平均年龄。
2、查询视图
视图定义后,就可以对视图进行查询了,视图的查询跟对基表的查询是一样的。
示例代码:
select * from personView; --该语句就会查出视图personView里面的所有字段
使用视图查询时,如果基表中增加了新的字段,那么只有在重建视图后才能在新的视图中查询到新增加的字段。例如:假设有一个表person(id,name,sex),对该表建立了视图personView(create or replace view personView as select * from person),如果之后我给person新增加了一个age字段,那么在这个时候我调用查询(select * from personView)的结果集中是不包含age字段的,如果想显示age字段,则需要重建该视图。这个原因就是之前说过的视图只是一个虚表,建立视图的时候在数据字典里面只保存了视图的定义,在对视图进行操作的时候,系统会根据视图的定义去操作对应的基表,所以在基表里面新增了字段之后,对应的视图中是没有新字段的定义的,也就不能显示新字段了。
如果与视图相关联的表或者视图被删除,则该视图将不能再使用。
3、更新视图
通过更新视图,可以修改基表中的数据。但并不是所有的视图都是可以进行更新的,一个视图能够更新需要满足以下条件:
a.没有使用连接函数、集合运算函数和组函数
b.创建视图的select语句中没有聚合函数且没有group by、start with子句和distinct关键字
c.创建视图没有包含只读属性
(1)插入数据
可以使用insert语句通过视图向基表插入数据
示例代码:
--假设有这样一个视图:create or replace view personView as select name, sex from person;
insert into personView values('张三', '男'); --personView是对应的视图名。
(2)修改数据
可以使用update语句通过视图修改基表中的数据,操作和修改表数据差不多。
示例代码:
update personView set sex='女' where name='张三';
(3)删除数据
可以使用delete语句通过视图删除基表中的数据。
示例代码:
delete from personView where name='张三';
4、修改视图的定义 ---需要补充
Oracle中提供了alter view语句,但是该语句不是用于修改视图的定义的,而是用于重新编译或者验证现有视图的。修改视图的定义的方法和新建视图的方法差不多,只是使用的是create or replace view viewName……,这样新的视图就代替了旧的视图了。
示例代码:
--修改视图personView的定义
create or replace force view personView as select id,name,age from person;
5、删除视图
删除视图就是删除视图的定义,删除一个视图是相当简单,类似于删除一个表,它的语法格式如下:
drop view [schema.]viewName;
分享到:
相关推荐
本实验涵盖了 Oracle 中的视图概念、创建视图、显示视图的内容、从数据字典视图中选择视图的名字和文本、使用视图查询数据、创建带有条件的视图、显示视图的结构和内容、更新视图、创建复杂视图等内容,为读者提供了...
《深入浅出Oracle——DBA入门、进阶与诊断案例》是盖国强先生的一本经典著作,专门针对Oracle数据库管理进行深入讲解。这本书对于想要成为Oracle DBA(数据库管理员)或者希望提升自己在Oracle数据库管理技能的人来...
《深入解析Oracle——DBA入门、进阶与诊断案例》是一本专为Oracle数据库管理员(DBA)设计的详尽指南。这本书旨在帮助初学者掌握Oracle数据库的基本操作,并引导有经验的DBA深入理解Oracle的高级特性,同时提供实用...
以下是对"经典:循序渐进Oracle——- 数据的存储"这一主题的详细解析: 1. **物理及逻辑结构** Oracle数据库采用层次化的存储结构,包括物理层和逻辑层。逻辑层主要由表空间、数据文件、表、分区和索引等组成,...
这里我们将深入探讨其中的一个常见视图——V$SESSION。 V$SESSION 视图是 Oracle 提供的核心性能监视视图之一,它记录了所有与数据库实例建立连接的会话(session)信息,包括用户会话和后台进程,如 DBWR(数据库...
在本教程中,我们将通过一个具体的案例——SALESHISTORY (SH) 示例模式,来了解如何实施物化视图和查询重写功能。该场景涉及到一系列的步骤,包括模式的修改、物化视图的创建与维护以及查询重写的启用等。 #### 四...
除了V$视图外,Oracle还提供了另一种类型的视图——GV$视图(Global V$),主要用于在RAC环境中获取所有实例的信息。 **特点:** - 对于大多数V$视图(除了V$CACHE_LOCK、V$LOCK_ACTIVITY、V$LOCKS_WITH_...
Oracle数据库的物理结构由操作系统文件组成,包括数据文件、控制文件、日志文件等,而逻辑结构则反映了数据库的逻辑关系,如表、索引和视图等。会话是用户与Oracle服务器的连接,从连接建立到断开期间,用户可以通过...
### Oracle SOA 套件——Oracle BPEL 流程管理器 #### 执行概况与背景 在当今快速变化的市场环境下,企业面临着前所未有的挑战:市场动态变化迅速、竞争压力持续增大以及客户需求多样化。这些因素共同作用,对企业...
### Oracle经典教程1——走进Oracle #### Oracle简介 Oracle是一种基于对象的关系型数据库管理系统,它由美国甲骨文公司开发并维护。Oracle数据库系统因其高度可靠性和强大的数据处理能力而闻名,广泛应用于各种...
然后,切换回Database Explorer视图,打开你的Oracle数据库连接,选择合适的数据库用户并找到需要映射的表。在表上右键选择“Hibernate Reverse Engineering”,开始配置逆向工程。你可以根据项目需求选择生成的内容...
本讲堂——"MLDN魔乐科技_Oracle课堂21_视图"聚焦于Oracle数据库中的一个重要概念——视图。视图是数据库系统中的一个虚拟表,它是由SQL查询语句创建的,提供了从不同角度查看数据库数据的能力。 视图的创建基于一...
在深入学习Oracle数据库时,还会接触到更多高级概念,如索引、视图、存储过程、触发器、游标等,这些都是提升数据库性能和管理效率的关键。随着学习的深入,你将更熟练地运用这些工具和技巧来管理和操作数据库,为...
在给出的部分内容中,可以看到一个查询日志文件历史的SQL语句,通过`v$log_history`视图获取了日志文件切换的时间差。这些数据可以帮助分析当前的日志切换频率。例如,查询结果中的"MINUTES"列显示了每次日志切换...