(五)数据库视图

来源:互联网 发布:vivo软件 编辑:程序博客网 时间:2024/05/21 22:27

视图是从一个或几个基本表(或视图)导出表。它与基本表不同,它是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。所以基本表中的数据发生变化,从视图中查询出的数据也就随之改变了。从这个意义上讲,视图就像一个窗口,透过它就可以看到数据库中自己感兴趣的数据及其变化。

一、定义视图

1.建立视图

CREATE VIEW <视图名>[(<列名>[,<列名>]……)]AS <子查询>[WITH CHECK OPTION];

其中,子查询可以是任意复杂的SELECT 语句,但通常不充许含有ORDET BY 子句和 DISTINCT 短语。
WITH CHECK OPTION 表示对视图进行UPDATE,INSERT和DELECT操作时要保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)。

组成视图的属性列名或者全部省略或者全部指定,没有第三种选择。如果省略了视图的各个属性列明,则隐含该视图由子查询中SELECT 子句目标中的诸字段组成。但下列三种情况必须明确指定组成视图的所有列名:
(1)某个目标列不是单纯的属性名,而是聚集函数或列表达式;
(2)多表连接时选出了几个同名列作为视图的字段;
(3)需要在视图中为某个列启用新的更合适的名字

建立信息系学生的视图
CREATE VIEW IS_StudentASSELECT Sno,Sname,SageFROM StudentWHERE Sdept='IS';

建立信息系学生的视图,并要求进行修改和插入操作时仍需保证该视图只有信息系的学生。
CREATE VIEW IS_Student             /*后面要使用该视图*/ASSELECT Sno,Sname,SageFROM StudentWHERE Sdept='IS'WITH CHECK OPTION;
由于在定义IS_Student视图时加上WITH CHECK OPTON 子句,以后对该视图进行插入、修改和删除操作时,RDBMS会自动加上Sdept=’IS'的条件。

当建立在多个基本表时;
建立信息系选修了1号课程的学生的视图。
CREATE VIEW IS_S1(Sno,Sname,Grade)ASSELECT Student.Sno,Sname,GradeFROM Student,SCWHERE Sdept='IS'AND       Student.Sno=SC.Sno AND      SC.Cno='1';

将学生的学号及他的平均成绩定义为一个视图。
CREATE VIEW S_G(Sno,Gave)ASSELECT Sno,AVG(Grade)FROM SCGROUP BY Sno;

2.删除视图

该语句的格式为:
DROP VIEW <视图名>[CASCADE];

视图删除后视图的定义将从数据字典中删除。如果该视图上还导出了其它视图,则使用CASCADE级联删除语句,把该视图和由它导出的所有视图一起删除。


二、查询视图

在信息系学生的视图中找出年龄小于20岁的学生。
SELECT Sno,SageFROM IS_StudentWHERE Sage<20;

本例转换后的查询语句为:
SELECT Sno,SageFROM StudentWHERE Sdept='IS'AND Sage<20;


三、更新视图

由于视图是不实际存储数据的虚表,因此对视图的更新,最终要转换对基本表的更新。

将信息系学生视图IS_Student中学号为14042401的学生姓名改为“刘成”。
UPDATE IS_StudentSET Sname='刘成'WHERE Sno='14042401';
转换后的更新语句为:
UPDATE  StudentSET Sname='刘成'WHERE Sno='14042401' AND Sdept='IS';

向信息系学生视图IS_Student 中插入一个新的学生记录,其中学号为14042405,姓名为赵新,年龄为20岁。
INSERT INTO IS_StudentVALUES('14042405','赵新',20);
转换对基本表的更新:
INSERTINTO Student(Sno,Sname,Sage,Sdept)VALUES('14042405','赵新',20,'IS');

删除信息系学生视图IS_Student 中学号为14042405的记录。
DELETEFROM IS_StudentWHERE Sno='14042405';
转换为对基本表的更新:
DELETE FROM StudentWHERE Sno='14042405'AND Sdept='IS';

四、视图作用

1.视图能够简化用户操作;
2.视图使用户能以多种角度看待统一数据;
3.视图对重构数据库提供了一定程度的逻辑性;
4.视图能够对机密数据提供安全保护;
5.适当的利用视图可以更清晰的表达查询。










1 0
原创粉丝点击