数据库实验四答案--实验四----1.定义“IS”系学生基本情况视图V_IS并查询结果;createviewV_ISasselect*fromSwhereSdept='IS'withcheckoption;select*fromV_IS;--2.将S,C,SC表中学生的学号,姓名,课程号,课程名,成绩定义为视图V_S_C_G并查询结果;createviewV_S_C_GasselectS.Sno,Sname,C.Cno,CnamefromS,C,SCwhereS.Sno=SC.SnoandC.Cno=SC.Cno;select*fromV_S_C_G;--3.将各系学生人数,平均年龄定义为视图V_NUM_AVG并查询结果;createviewV_NUM_AVGasselectcount(Sno)DeptNum,avg(Sage)DeptAvgAge,SdeptfromSgroupbySdept;select*fromV_NUM_AVG;--4.定义一个反映学生出生年份的视图V_YEAR并查询结果;createviewV_YEARasselectSno,2012-SagebirthdayfromS;select*fromV_YEAR;--5.将各位学生选修课程的门数及平均成绩定义为视图V_AVG_S_G并查询结果;createviewV_AVG_S_GasselectSC.Sno,count(SC.Cno)CountCno,avg(Grade)AvgGradefromS,C,SCwhereS.Sno=SC.SnoandC.Cno=SC.CnogroupbySC.Sno;select*fromV_AVG_S_G;--6.将各门课程的选修人数及平均成绩定义为视图V_AVG_C_G并查询结果;createviewV_AVG_C_Gasselectcount(SC.Sno)Cnum,avg(Grade)AvgGradefromS,C,SCwhereS.Sno=SC.SnoandC.Cno=SC.CnogroupbySC.Cno;select*fromV_AVG_C_G;--7.查询平均成绩为90分以上的学生学号、姓名和成绩;selectSC.Sno,Sname,avg(Grade)AvgGradefromS,SCwhereS.Sno=SC.SnogroupbySC.Sno,Snamehavingavg(Grade)>90;--8.查询各课成绩均大于平均成绩的学生学号、姓名、课程和成绩;createviewV_AVGasselectSC.Cno,avg(Grade)AvgGradefromC,SCwhereC.Cno=SC.CnogroupbySC.Cno;selectdistinctS.Sno,Sname,C.Cno,GradefromS,SC,C,V_AVGwhereS.Sno=SC.SnoandC.Cno=V_AVG.CnoandGrade>V_AVG.AvgGrade;--9.按系统计各系平均成绩在80分以上的人数,结果按降序排列;selectSdept,count(AvgGrade)NumfromS,V_AVG_S_GwhereS.Sno=V_AVG_S_G.SnoandAvgGrade>80groupbySdeptorderbyNumdesc;--10通过视图V_IS,分别将学号为“S1”和“S4”的学生姓名更改为“S1_MMM”,”S4_MMM”并查询结果;insertintoS(Sno,Sname,Ssex,Sage,Sdept)values('200215121','三毛','男',21,'IS');insertintoS(Sno,Sname,Ssex,Sage,Sdept)values('200215124','紫薇','女',19,'IS');updateV_ISsetSno='S1_MMM'whereSno='200215121';updateV_ISsetSno='S4_MMM'whereSno='200215124';select*fromV_IS;--11.通过视图V_IS,新增加一个学生记录('S12','YANXI',19,'IS'),并查询结果;insertintoV_IS(Sno,Sname,Sage,Sdept)values('S12','YANXI',19,'IS');select*fromV_ISwhereSno='S12';--11.通过视图V_IS,新增加一个学生记录('S13','YANXI',19,'MA'),并查询结果;insertintoV_IS(Sno,Sname,Sage,Sdept)values('S13','YANXI',19,'MA');--Tip:由于该学生是MA系的,当有check约束时将会产生更新错误。--13.通过视图V_IS,删除学号为“S12”和“S3”的学生信息,并查询结果;insertintoV_IS(Sno,Sname,Sage,Sdept)values('S3','李杨',21,'IS');select*fromV_IS;deletefromV_ISwhereSno='S12';deletefromV_ISwhereSno='S3';select*fromV_IS;--14.要通过视图V_S_C_G,将学号为“S12”的姓名改为“S12_MMM”,是否可以实现?updateV_S_C_GsetSname='S12_MMM'whereSno='S12';--15.要通过视图V_AVG_S_G,将学号为“S1”的平均成绩改为90分,是否可以实现?--不能实现,因为视图不是真正存在的,对视图的修改实际上是对基本表的修改,--而平均分在基本表中不存在,涉及到多个成绩,所以不能修改。