數據庫實驗—視圖定義與操作


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM