数据库视图实验.docx
《数据库视图实验.docx》由会员分享,可在线阅读,更多相关《数据库视图实验.docx(14页珍藏版)》请在冰豆网上搜索。
数据库视图实验
实验六视图
一、实验内容
1.建立计算机科学与技术系的学生的视图View_Stu,并要求进行修改和插入操作时仍需保证该视图只有计算机科学与技术系的学生。
(做完之后在视图中添加一行,Sdept中随便写其他系,然后运行观看结果)
2.建立计算机科学与技术系选修了数学分析且成绩在60分以上的学生的视图View_grade
3.定义一个反映学生年份的视图
4.将所有女生的学号以及他的平均成绩定义为一个视图
5.删除第4题中的视图,并思考cascade的作用
6.在第3题的视图中找出年龄小于25岁的学生
7.在第4题中的视图查询平均成绩在70分以上的学生学号和平均成绩
8.将第1题的视图View_Stu中学号为20040744009的姓名改为“刘晨”
9.向View_Stu中插入一条新的学生记录,其中学号为20040744020,姓名为赵新,出生年月为1990-8-23
10.删除View_Stu中学号为20040744020的记录(验证视图View_grade是否能更新。
思考视图在什么情况下不能更新)
11.对每个同学找出他获得最高成绩的课程号、课程名以及相应的课程分数,并将查询结果作为VMgrade视图保存。
二、实验过程
1.打开查询分析器,输入代码
createviewView_Stu
as
selectSno,Sname,Sbirth
fromtStudent
whereSdept='计算机科学与技术'
withcheckoption
结果,创建成功
在视图中添加一行,令Sname=‘丁欣雨‘,Sdept=‘通信工程’
insert
intoView_Stu
values('20040744020','丁欣雨','1990-8-7');
结果提示错误:
试图进行的插入或更新已失败,原因是目标视图或者目标视图所跨越的某一视图指定了WITHCHECKOPTION,而该操作的一个或多个结果行又不符合CHECKOPTION约束的条件。
语句已终止。
2.建立计算机科学与技术系选修了数学分析且成绩在60分以上的学生的视图View_grade
首先,建立选修了数学分析的计算机科学与技术系学生的视图view_grade1
createviewview_grade1(Sno,Sname,Grade)
as
selecttStudent.Sno,Sname,tSC.Grade
fromtStudent,tSC
whereSdept='计算机科学与技术'and
tStudent.Sno=tSC.Snoand
tSC.Cnoin
(selectCno
fromtCourse
whereCname='数学分析')
再建立分数大于等于60的学生视图View_grade
createviewView_grade
as
selectSno,Sname,Grade
fromview_grade1
whereGrade>=60
结果:
3.定义一个反映学生年份的视图
createviewView_birth
as
selectSno,Sname,Sbirth=year(Sbirth)
fromtStudent
如图:
结果:
4.将所有女生的学号以及他的平均成绩定义为一个视图SF_G
createviewSF_G(Sno,Gavg)/*femalestudents'grade*/
as
selectSno,avg(Grade)
fromtSC
whereSnoin
(selectSno
fromtStudent
whereSsex='女')
groupbySno
结果:
5.删除第4题中的视图,并思考cascade的作用
视图已成功删除:
CASCADE的作用是删除视图和该视图导出的所有视图
6.在第3题的视图中找出年龄小于25岁的学生
selectSno,'Sage:
',2013-Sbirth
fromView_birth
where2013-Sbirth<25;
结果:
7.在第4题中的视图查询平均成绩在70分以上的学生学号和平均成绩
selectSno,Gavg
fromSF_G
whereGavg>=70;
结果:
8.将第1题的视图View_Stu中学号为20040744009的姓名改为“刘晨”
updateView_Stu
setSname='刘晨'
whereSno='20040744009';
结果:
9.向View_Stu中插入一条新的学生记录,其中学号为20040744020,姓名为赵新,出生年月为1990-8-23
insert
intotStudent(Sno,Sname,Sbirth,Sdept)
values('20040744020','赵新','1990-8-23','计算机科学与技术');
系统自动将其放入了视图中:
10.删除View_Stu中学号为20040744020的记录(验证视图View_grade是否能更新。
思考视图在什么情况下不能更新)
delete
fromView_Stu
whereSno='20040744020';
结果:
视图无法更新的条件:
1.视图由两个以上基本表导出。
2.视图的字段来自字段表达式或常数时,不能进行update和insert操作,但可以进行delete操作。
3.视图的字段来自聚集函数。
4.视图定义中含有groupby和distinct。
5.视图定义中有嵌套查询,且内层查询的from里面是该视图的基本表
11.对每个同学找出他获得最高成绩的课程号、课程名以及相应的课程分数,并将查询结果作为VMgrade视图保存。
先建立最高成绩和学号的视图VMgarde1:
createviewVMgrade1
as
selectSno,max(Grade)Mgrade
fromtSC
groupbySno
再建立连接:
createviewVMgrade(Sno,Cno,Cname,Grade)
as
selectdistincttSC.Sno,tSC.Cno,tCourse.Cname,tSC.Grade
fromtSC,tCourse,VMgrade1
wheretSC.Sno=VMgrade1.Snoand
tSC.grade=VMgrade1.Mgradeand
tSC.Cno=tCourse.Cno
结果:
三、实验心得
视图的作用有三个:
一:
是安全保护,二:
是简化查询,三:
是以多种角度看待同一数据。
灵活运用视图