欢迎来到.net学习网

欢迎联系站长一起更新本网站!QQ:879621940

您当前所在位置:首页 » 关系数据库基础教程 » 正文

视图的定义和对视图的操作

创建时间:2012年06月02日 10:32  阅读次数:(4602)
分享到:
本章主要讲解以下3点知识:
1 视图的创建和撤消 
2 对视图的更新操作 
3 视图的优点 

视图的创建和撤消


视图的创建
创建视图可用“CREATE VIEW”语句实现。其句法如下:
CREATE VIEW <视图名>(列表名)AS <SELECT 查询语句>

例3.27  对于教学数据库中基本表S、SC、C,用户经常要用到S#、SNAME、CNAME和GRADE等列的数据,那么可用下列语句建立视图:
CREATE VIEW STUDENT_GRADE(S#,SNAME,CNAME,GRADE)
AS SELECT S.S#,SNAME,CNAME,GRADE
FROM S,SC,C WHERE S.S# = SC.S# AND SC.C# = C.C#;


视图的撤消
在视图不需要时,可以用“DROP VIEW”语句把其从系统中撤消。其句法如下:
DROP VIEW 视图名

例3.28  撤消STUDENT_GRADE视图,可用下列语句实现:
DROP VIEW STUDENT_GRADE;


对视图的更新操作


如果视图是从单个基本表只使用选择、投影操作导出的,并且包含了基本表的主键,那么这样的视图称为“行列子集视图”,并且可以被执行更新操作。

例3.29 下面讨论对视图更新的几个例子。
①设有一个视图定义
CREATE VIEW SUDENT_GRADE
AS 
SELECT S.S#, SNAME,CNAME,GRADE
FROM S,SC,C WHERE S.S# = SC.S#   AND SC.C# =C.C#;

这个视图定义了学生选修的课程名和成绩,是由三个基本表联接而成的。
如果用户要在视图中执行插入操作:
INSERT INTO STUDENT_GRADE VALUES ('S24', 'WANG', 'MATHS',80);

若在基本表C中,课程名为MATHS的课程号有多个,则往基本表SC插入元组时,课程号C#就不定了。因此,对这个视图的更新是不允许的。

②设有一个视图定义,包含每个学生选修课程(成绩为非空)的门数和平均成绩:
CREATE VIEW S_GRADE(S#,C_NUM,AVG_GRADE)
AS 
SELECT S#,COUNT(C#),AVG(GRADE)
FROM SC WHERE GRADE IS NOT NULL

视图S_GRADE虽然是从单个基本表导出,但导出时使用了分组和聚集操作,因此也是不能更新的。譬如,在未更改基本表SC中值时,要在视图S_GRADE中更改学生的平均成绩,显然是不切实际的。

③如果定义了一个有关男学生的视图:
CREATE VIEW S_MALE
AS 
SELECT S#,SNAME,AGE FROM S WHERE SEX ='M';

这个视图是从单个关系只使用选择和投影导出的,并且包含键S#,因此是可更新的。譬如,执行插入操作:
INSERT INTO S_MALE VALUES('S28','WU',18);

系统自动会把它转变成下列语句:
INSERT INTO S VALUES('S28', 'WU',18, 'M');


视图的优点
视图是用户一级的数据观点,由于有了视图,使数据库系统具有下列优点:
(1)视图提供了逻辑数据独立性。
(2)简化了用户观点。数据库的全部结构是复杂的,并有多种联系。
(3)数据的安全保护功能。S孴鶺{|媁 \<
来源:.net学习网
说明:所有来源为 .net学习网的文章均为原创,如有转载,请在转载处标注本页地址,谢谢!
【编辑:Wyf】

打赏

取消

感谢您的支持,我会做的更好!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

最新评论

共有评论0条
  • 暂无任何评论,请留下您对本文章的看法,共同参入讨论!
发表评论:
留言人:
内  容:
请输入问题 62+37=? 的结果(结果是:99)
结  果: