2.2.4 视图管理

2.2.4 视图管理

视图是从一个或几个基本表(或视图)导出的表,它是一个虚表,即数据字典中只存放视图的定义(由视图名和查询语句组成),而不存放对应的数据,这些数据仍存放在原来的基本表中。如果需要使用视图,则执行其对应的查询语句,所导出的结果即为视图的数据。

视图是关系数据库系统提供给用户以多种角度观察数据库中数据的重要机制,它简化了用户数据模型,提供了逻辑数据独立性,实现了数据共享和数据的安全。

视图和表之间的关系如图2-27所示。

图2-27 视图和表之间的关系

2.2.4.1 创建视图

视图分为简单视图和复杂视图。简单视图是指视图数据来源于一个表,不包含函数和分组,可以进行DML操作;复杂视图是指视图数据来源于多个表,包含函数及分组,不可以进行DML操作。

1.视图定义

语法格式为:

参数说明如下。

(1)<模式名>指明被创建的视图属于哪个模式,缺省为当前模式。

(2)<视图名>指明被创建的视图的名称。

(3)<列名>指明被创建的视图中列的名称。

(4)<子查询表达式>标识视图所基于的表的行和列。其语法遵照SELECT语句的语法规则。

(5)<表连接>的查询方式包括交叉连接(cross join)、自然连接(natural join)、内连接(inner join)、外连接(outer join)。语法如下:

(6)WITH CHECK OPTION用于可更新视图中,指明往该视图中insert或update数据时,插入行或更新行的数据必须满足视图定义中<查询说明>所指定的条件。如果不带该选项,则插入行或更新行的数据不必满足视图定义中<查询说明>所指定的条件。[LOCAL|CASCADED]用于当前视图是根据另一个视图定义的情况,当通过视图向基本表中insert或update数据时,其决定了满足CHECK条件的范围。指定LOCAL,数据必须满足当前视图定义中<查询说明>所指定的条件;指定CASCADED,数据必须满足当前视图和所有相关视图定义中<查询说明>所指定的条件。

(7)WITH READ ONLY指明视图是只读视图,只可以进行查询,不可以进行其他DML操作。如果不带该选项,则根据DM自身判断视图是否可更新的规则来判断视图是否只读。

2.创建简单视图

示例1 现有一张员工表DMHR.EMPLOYEE,我们发现有很多敏感信息,如工资、身份证号、电话号码、奖金。这些信息我们不想给其他人看到,只想把员工ID、员工姓名、部门ID给其他人看。怎么办呢?我们可以建立一张简单视图来解决这个问题。语法如下:

创建完成后,在DM管理工具中可以看到图2-28所示的视图信息。

除了使用SQL语句以外,还可以使用DM管理工具创建简单视图,如图2-29所示。

图2-28 视图信息

图2-29 创建简单视图

3.创建复杂视图

在上文创建的视图中,我们查询到的是员工ID、姓名及其部门ID,但是查询部门ID很不方便,我们想把部门ID换成部门名称,该怎么处理呢?这时候就会用到复杂视图。

部门表的信息如下:

示例2 创建一张视图,要求只能查询员工ID、员工姓名、部门名称信息。

使用DM管理工具创建复杂视图,如图2-30所示。

图2-30 创建复杂视图

查看视图内容,如图2-31所示。

图2-31 查看视图内容

2.2.4.2 查询和删除视图

1.查询视图

我们可以通过视图DBA_VIEWS来查询视图相关信息,如图2-32所示,也可以通过DM管理工具来查询视图相关信息。

2.删除视图

使用SQL语句删除视图:

也可以使用DM管理工具删除视图,如图2-33所示。

图2-32 查询视图相关信息

图2-33 删除视图