1
大学信息技术基础教程
1.2.6.4.6 6.4.6 视图

6.4.6 视图

视图是从一个或几个基本表导出的表,供不同的用户从不同的角度观察数据库中的数据。视图是一个虚表。数据库中只存放视图的定义,不存放视图对应的数据。若基本表中的数据发生变化,视图中的数据也发生相应的变化。

(1)创建视图

语句格式:

CREATE VIEW<视图名>[(<列名>[,<列名>]...)]

AS<子查询>

[WITH CHECK OPTION];

其中子查询通常不允许含有ORDER BY或DISTINCT短语。

WITH CHECK OPTION表示对视图进行UPDATE、INSERT和DELETE操作时要保证更新、插入或删除的行满足视图定义中子查询中的条件表达式。

[例45]创建计算机系学生的视图。

CREATE VIEW CSStudent

AS

SELECT Sno,Sname,Sage

FROM Student

WHERE Sdept=′计算机′;

实际上DBMS只是把对视图的定义存入数据字典中,并不执行其中的SELECT语句,只是在对视图查询时才按视图的定义从基本表中将数据查出。

(2)删除视图

语句格式:

DROP VIEW<视图名>;

[例46]删除视图ISS1。

DROP VIEW ISS1;

执行此语句后,ISS1视图的定义将从数据字典中被删除,原来由ISS1导出的视图的定义仍存在数据字典中,但已不能使用,因此最好也同时删掉。

(3)查询视图

查询视图的操作同查询基本表一样。DBMS执行视图的查询时先检查查询涉及的表或视图是否在数据库中存在,如果存在,则把视图定义中的子查询和用户对视图的查询结合起来转换成对基本表的查询,然后再执行这个经过修正的查询。将对视图的查询转换为对基本表的查询的过程称为视图的消解。

[例47]在计算机系学生的视图中找出年龄小于20岁的学生。

SELECT Sno,Sage

FROM CSStudent

WHERE Sage<20;

DBMS执行此查询时,将其与CSStudent视图定义中的子查询

SELECT Sno,Sname,Sage

FROM Student

WHERE Sdept=′计算机′;

结合起来,转换成对基本表Student的查询。修正后的查询语句为:

SELECT Sno,Sname,Sage

FROM Student

WHERE Sdept=′计算机′AND Sage<20;