(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;