1、创建视图
--***① 将Student Course 和sc表中学生的学号,姓名,课程号,课程名,成绩定义为视图V_S_C_G ***
CREATE VIEW V_S_C_G AS
SELECT Student.sno,sname,course.cno,cname,grade
FROM Student,SC,course
WHERE SC.sno = Student.sno AND SC.cno = course.cno
GO
--***② 将各系学生人数,平均年龄定义为视图V_NUM_AVG ***
CREATE VIEW V_NUM_AVG AS
SELECT sdept,COUNT(*) num,AVG(YEAR(GETDATE()) - YEAR(birthday)) avg_age
FROM Student
GROUP BY sdept
GO
--***③ 将student中信管系学生的个人信息定义为视图 V_IS ***
CREATE VIEW V_IS AS
SELECT *
FROM Student
WHERE sdept = '信管'
GO
--***④ 将各门课程的选修人数及平均成绩定义为视图V_AVG_C_G ***
CREATE VIEW V_AVG_C_G AS
SELECT cno,COUNT(*) num,AVG(grade) avg_grade
FROM SC
GROUP BY cno
GO
--***⑤ 将各位学生选修课程的门数及平均成绩定义为视图V_AVG_S_G ***
CREATE VIEW V_AVG_S_G AS
SELECT sno,COUNT(*) num,AVG(grade) avg_grade
FROM SC
GROUP BY sno
GO
2、修改视图
重命名用代码我不知道怎么写,如果有知道的可以在评论区说一下,谢谢
--****2. 修改视图 ****
--***在查询分析器中使用更改视图的命令将上面建立的视图“V_IS”更名为“V_MIS” ***
3、使用视图
--****3.使用视图 ****
--***(1)查询平均成绩为90分以上的学生学号、姓名和成绩 ***
SELECT DISTINCT V_AVG_S_G.sno,sname,grade
FROM V_S_C_G,V_AVG_S_G
WHERE V_S_C_G.sno = V_AVG_S_G.sno AND avg_grade > 90
--***(2)查询各课成绩均大于平均成绩的学生学号、姓名、课程和成绩***
SELECT DISTINCT V_S_C_G.sno,sname,V_S_C_G.cno,grade
FROM V_S_C_G,V_AVG_C_G
WHERE sno IN(SELECT V_S_C_G.sno
FROM V_S_C_G,V_AVG_C_G
WHERE grade > avg_grade AND V_S_C_G.cno = V_AVG_C_G.cno
)
--***(3)按系统计各系平均成绩在80分以上的人数,结果按降序排列***
SELECT Student.sdept,COUNT(*)
FROM Student,V_AVG_S_G
WHERE Student.sno = V_AVG_S_G.sno AND avg_grade > 80
GROUP BY sdept
ORDER BY COUNT(*) DESC
4、修改视图
--*** (1)通过视图V_MIS,分别将学号为“1002”和“1004”的学生姓名更改为“1002_MMM”,”1004_MMM” 并查询结果 ***
UPDATE V_MIS
SET sno = '1006_MMM'
WHERE sno = '1006'
UPDATE V_MIS
SET sno = '1017_MMM'
WHERE sno = '1017'
--***(2)通过视图V_MIS,新增加一个学生记录 ('S12','YAN XI',’2001.10.10’,'IS'),并查询结果 ***
INSERT INTO V_MIS(sno,sname,birthday,sdept)
VALUES('S12','YAN XI','2001.10.10','IS')
--***(3)通过视图V_MIS,删除学号为“S12”和“001”的学生信息,并查询结果 ***
DELETE
FROM V_MIS
WHERE sno IN('S12','1001')
--***(4)要通过视图V_MIS,将学号为“1002”的姓名改为“1002_MMM”,是否可以实现?并说明原因 ***
可以,因为原表格中存在学号为 1002 的学生数据
--***(5)要通过视图V_AVG_S_G,将学号为“S1”的平均成绩改为90分,是否可以实现?并说明原因 ***
不可以,因为原表格中没有平均成绩这一列