天天看点

Oracle——07视图

视图是从一个表或视图导出的表,也可以是从多个表或视图导出的表。视图是一个虚表,数据库不对视图所对应的数据进行实际存储,只存储视图的定义,对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基表。

视图一旦被定义以后就可以像表一样被查询、修改、删除和更新。

使用视图有如下优点:

(1)为用户集中数据,简化用户的数据查询和处理。有时我们所需要的数据可能分散在几个不同的表中,定义视图可以将它们集中在一起,从而方便我们对数据的查询和处理。

(2)屏蔽数据库的复杂性。在使用数据时,使用户不必了解复杂的数据库表结构。

(3)简化用户的权限管理。我们有时候可能会授予某一用户只能查看对应表的某些列,这是相当麻烦的,有了视图后,我们就可以把能够查看的列抽出来建立对应的视图,然后赋予用户使用视图的权限。

(4)便于数据共享。各不同的用户不必都保存自己的数据,同样的数据只需保存一次。

1、使用create view语句创建视图:

语法格式:

示例代码:

2、查询视图

视图定义后,就可以对视图进行查询了,视图的查询跟对基表的查询是一样的。

使用视图查询时,如果基表中增加了新的字段,那么只有在重建视图后才能在新的视图中查询到新增加的字段。例如:假设有一个表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语句通过视图向基表插入数据

(2)修改数据

可以使用update语句通过视图修改基表中的数据,操作和修改表数据差不多。

(3)删除数据

可以使用delete语句通过视图删除基表中的数据。

4、修改视图的定义 ---需要补充

Oracle中提供了alter view语句,但是该语句不是用于修改视图的定义的,而是用于重新编译或者验证现有视图的。修改视图的定义的方法和新建视图的方法差不多,只是使用的是create or replace view viewName……,这样新的视图就代替了旧的视图了。

--修改视图personView的定义

5、删除视图

删除视图就是删除视图的定义,删除一个视图是相当简单,类似于删除一个表,它的语法格式如下:

drop view [schema.]viewName;