(1)定义“IS”系学生基本情况视图V_IS 并查询结果
create view V_IS as select Sno, Sname, Sage from S where Sdept = 'IS';
(2)将S,C,SC表中学生的学号,姓名,课程号,课程名,成绩定义为视图V_S_C_G并查询结果
create view V_S_C_G ss select S.Sno, Sname, C.Cno, Cname, Grade from S, C,SC where S.Sno = SC.Sno and C.Cno = SC.Cno;
(3)将各系学生人数,平均年龄定义为视图V_NUM_AVG并查询结果
create view V_NUM_AVG as select count(Sno) as NUM, avg(Sage) as AVG from S group by Sdept;
(4)定义一个反映学生出生年份的视图V_YEAR并查询结果
create view V_YEAR as select (2020 – Sage) as YEAR from S;
(5)将各位学生选修课程的门数及平均成绩定义为视图V_AVG_S_G并查询结果
create view V_AVG_S_G as select count(Cno) as NUM, avg(Grade) as AVG from SC group by Sno;
(6)将各门课程的选修人数及平均成绩定义为视图V_AVG_C_G并查询结果
create view V_AVG_C_G as select Cno,count(Sno) as NUM,avg(Grade) as AVG from SC group by Cno;
(7)查询平均成绩为90分以上的学生学号、姓名和成绩
select Sno,Sname, Grade from V_S_C_G where Sno in select Sno from V_S_C_G group by Sno having avg(Grade) >=90;
(8)查询各课成绩均大于平均成绩的学生学号、姓名、课程和成绩
select * from V_S_C_G where Sno in (select X.Sno from V_S_C_G X where not exists (select Y.Grade from V_S_C_G Y where Grade <= (select avg(Grade) from V_S_C_G Z where (Y.Cno = Z.Cno) and (X.Sno = Y.Sno))));
(9)按系统计各系平均成绩在80分以上的人数,结果按降序排列
select Sdept,count(Sno) as NUM. from S where Sno in (select V_S_C_G.Sno from V_S_C_G group by V_S_C_G.Sno having avg(Grade)>=80) group by Sdept;
(10)通过视图V_IS,分别将学号为“S1”和“S4”的学生姓名更改为“S1_MMM”,”S4_MMM” 并查询结果
update V_IS set Sname = ‘周芷若’ where Sno = ‘1’; update V_Is set Sname = ‘乔峰’ where Sno = ‘4’; select * from S;
(11)通过视图V_IS,新增加一个学生记录 ('S12','YAN XI',19,'IS'),并查询结果
insert into V_IS(Sno ,Sname, Sage,Sdept) values ('S12', 'YAN XI', 19. 'IS')
(12)通过视图V_IS,新增加一个学生记录 ('10','木婉清',19,'IS'),并查询结果
insert into V_IS(Sno, Sname, Sage, Sdept)values ('10','木婉清',19,'IS'); select * from S;
(13)通过视图V_IS,删除学号为“S12”和“S3”的学生信息,并查询结果
delete from V_IS where Sno = ‘s12’ or Sno = ‘S3’
(14)要通过视图V_S_C_G,将学号为“S12”的姓名改为“S12_MMM”,是否能实现?
可以; update V_SC_G set Sname = ‘S12_MMM’ where Sno = ‘S12’;
(15)要通过视图V_AVG_S_G,将学号为“S1”的平均成绩改为90分,是否可以实现?
不能实现。因为V_AVG_S_G视图的字段来自聚集函数,里面有group by;