3.5 3.5 视 视 视 视 – 视视视视 视视视视视视视视 视视视视 视视视视视 视视视视视视视视 一(),, 视 视视视视 视视视视视 视视视视视视视视视视视视视 视视视视视 一。,, 视视视视视视 视视视视视视视视视视视视视视视视 ,。 – 3.5.1 视视视视 – 1. 视视视视 – SQL 视视视 CREATE VIEW 视视视视视视, 视 视视视视 一 :
3.5 3.5 视 图视 图– 视图是从一个或几个基本表(或视图)导出
的表,它与基本表不同,是一个虚表。换句话说,数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。
– 3.5.1 定义视图– 1. 建立视图– SQL 语言用 CREATE VIEW 命令建立视
图,其一般格式为 :
CREATE VIEW < 视图名 >[< 列名 >[,< 列名 >]…)]
AS < 子查询 > [WITH CHECK OPTION];如果 CREATE VIEW 语句仅指定了视图
名,省略了组成视图的各个属性名,则隐含该视图由子查询中 SELECT 子句目标列中的诸字段组成。但在下列三种情况
下必须明确指定组成视图的所有列名:其中某个目标不是单纯的属性名,而是
集函数或列表达式。多表连接是选出了几个同名列作为视图
的字段。需要在视图中为某个列启用新的更合适
的名字。
例 1 建立信息系学生的视图。CREATE VIEW IS-STUDENT AS SELECT Sno , Sname , Sage FROM Student WHERE Sdept =‘IS’ ;
DBMS 执行此语句时就相当建立如下虚表 :
IS -STUDENT 表 Sno Sname Sage95002 刘 辰 1995004 张 力 18
例 建立信息系学生的视图 , 进行操作时该视图只有信息系学生。
CREAT VIEW IS -STUDENT AS SELECT Sno , Sname , Sage FROM Student WHERE Sdept=‘IS’ WITH CHECK OPTION ;
建立选修了一号课程 的学生视建立选修了一号课程 的学生视图图
CREAT E VIEW IS-S1(Sno,Sname,Grade) AS SELECT Student.Sno , Sname, Grade FROM Student, SC WHERE Sdept=‘IS’ AND SC.Cno=‘1’ AND Student.Sno= SC.Sno
建立选修了一号课程成绩在 90 分以上的学生视图
CREATE VIEW IS-S2 AS SELECT Sno , Sname , Grade FROM IS-S1 WHERE Grade>=90
定义一个反映学生出生年份的视图。CREATE VIEW BT-S ( Sno , Sname , Sbirt
h ) AS SELECT Sno , Sname , 1996-Sage FROM Student ;
例将学生的学号极其平均成绩例将学生的学号极其平均成绩定义为一个视图定义为一个视图
CREATE VIEW S-G(Sno,Gavg) AS SELECT Sno, AVG(Grade) FROM SC GROUP BY Sno;
将表中所有女生定义为一个视将表中所有女生定义为一个视图图
CREAT VIEW F- Student (Stdnum, Name ,Sex, Age, Dept) AS SELECT * FROM Student WHERE Ssex=‘ 女’;
2 2 删除视图:使用 删除视图:使用 DROP VIEDROP VIEWW 格式格式
DROP VIEW < 视图名 > ;例 删除视图 IS-S1DROP VIEW IS-S1;
小结小结视图的类型: 1 基本表上的视图 { 单表视图,多表视
图 }2 视图上的视图 { 单视图上的视图,多
视图上的视图 }3 基本表与视图上的视图 { 普通视图,带
表达式的视图,分组视图 }
3.5.2 3.5.2 查询视图查询视图 例 在信息系学生的视图中找出年龄小于 20 的
学生。 SELECT Sno , Sage FROM IS-STUDENT WHERE Sage 〈 20; SELECT Sno,Sname,Sage FROM Student WHERE Sdept=‘IS’ ;
转换为转换为SELECT Sno, SageFROM StudentWHERE Sdept=‘IS’ AND Sage‹ 20 ;
例 查询信息系选修了一号课的例 查询信息系选修了一号课的学生学生
SELECT Sno , SnameFROM IS-STUDENT , SCWHERE IS -STUDENT.Sno=SC 。 Sno AND SC.Cno=‘1’;
3.5.3 3.5.3 视图更新视图更新 更新视图包括 : 插入( INSERT ) , 删除( DELETE )和修改 ( UPDATE ) 例 将信息系学生视图中学号为 95002 的学生改为“刘辰” . UPDATE IS_ STUDENT SET Sname =‘ 刘辰’ WHERE Sno =‘95002’;
转换语句转换语句UPDATE StudentSET Sname =‘ 刘辰’WHERE Sno =‘95002 AND Sdept=‘IS’
例 向信息系学生视图中插入一例 向信息系学生视图中插入一个新的学生记录个新的学生记录 .. 其中学号为其中学号为 9950295029 ,姓名为赵新,年龄为,姓名为赵新,年龄为 22
00 岁。岁。INSERT INTO IS -STUDENTVALUES (‘ 95029’ , ‘赵新’, 2
0 ) ;DBMS 将其转换为对表的基本更新 :
INSERT INTO Student ( Sno , Sname , Sage ,
Sdept )VALUES (‘ 95029’ ,‘赵新’,‘ 20’ ,
‘ IS’ )例 删除计算机系学生视图 CS-S 中学号为
95029 的学生记录
DELETE FROM IS-STUDENTWHERE Sno=‘95029’DBMS 将其换为对基本表的更新DELETE FROM StudentWHERE Sno=‘95029’AND Sdept=‘IS’ ;
关系数据库 遵守如下规定:1 若视图是由两个以上的基本表导出的 ,
则不允许更新。2 若视图的字段来自字段表达式或常数,
则不允许执行 INSERT 和 UPDATE , 但允许执行 DELETE 。
3 若视图的字段来自集函数,则不允许更新。
4 若视图中含有 GROUP BY 子句,不允许更新。
5 若视图中含有 DISTINCT 短语,不允许更新。
6 若视图中含有嵌套查询,并且内层查寻的子句 FROM 涉及的是该视图的基本表,则不允许更新。
7 一个不允许更新的视图上定义的视图 , 也不允许更新。
例 将成绩在平均成绩之上的元组定义成一个视图 GOOD-SC 。
CREATE VIEW GOOD-SC AS SELECT Sno , Cno , Grade FROM SC WHERE Grade> (SELECT AVG (Grade) FROM SC ) ;
3.5.43.5.4 视图的用途视图的用途1 视图能够简化用户的操作2 视图能够以多种角度看问题3 视图对重构数据库提供了一定程度的
逻辑独立性4 视图能够对机密数据提供安全保护