CREATEVIEW V_Sco AS SELECT sno,score FROM tb_score
SELECT*FROM V_Sco
任务三
创建视图 V_SCORE, 要求只显示学生的学号、姓名、系别、课号、课程名称及成绩。
1 2 3 4 5 6 7
CREATEVIEW V_SCORE AS SELECT s.sno,sn,dept,sc.cno,cn,score FROM tb_student s,tb_score sc,tb_course co WHERE s.sno=sc.sno AND sc.cno=co.cno
SELECT*FROM V_SCORE
任务四
各系学生人数、平均年龄创建视图 V_NUM_AVG。
1 2 3 4 5 6 7 8 9
CREATEVIEW V_NUM_AVG AS SELECT dept,COUNT(*) AS 学生人数, -- 同时包含聚合函数和基本字段,需要分组 GROUP BY AVG(year(GETDATE())-year(birthday)) AS 平均年龄 FROM tb_student GROUPBY dept
SELECT*FROM V_NUM_AVG
任务五
创建一个反映学生出生年份的视图 V_YEAR。
1 2 3 4 5 6
CREATEVIEW V_YEAR AS SELECT sno,sn,YEAR(birthday) AS 出生年份 -- 计算公式 FROM tb_student
SELECT*FROM V_YEAR
任务六
将各位学生选修课程的门数及平均成绩创建视图 V_AVG_S_G。
1 2 3 4 5 6 7
CREATEVIEW V_AVG_S_G AS SELECT sno,COUNT(*) 选修课程数,AVG(score) 平均分 FROM tb_score GROUPBY sno
SELECT*FROM V_AVG_S_G
任务七
将各门课程的选修人数及平均成绩创建视图 V_AVG_C_G。
1 2 3 4 5 6 7
CREATEVIEW V_AVG_C_G AS SELECT cno,COUNT(*) 课程选修人数,AVG(score) 平均成绩 FROM tb_score GROUPBY cno
SELECT*FROM V_AVG_C_G
任务八
创建视图 V_YEAR_RJ,显示软件工程系出生日期在 2001 年之后出生的学生信息。
1 2 3 4 5 6 7
CREATEVIEW V_YEAR_RJ AS SELECT* FROM tb_student WHERE major='软件工程'ANDYEAR(birthday)>2001
SELECT*FROM V_YEAR_RJ
任务九
基于视图 V_STU,创建视图 V_SEX,查看男党员的信息。
1 2 3 4 5 6
CREATEVIEW V_SEX AS SELECT*FROM V_STU WHERE sex='男'AND polity='党员'
-- (1) 查询平均成绩为 90 分以上的学生的学号、姓名和成绩。 -- method1 SELECT sno,sn,score FROM v_score WHERE sno in(SELECT sno FROM V_AVG_S_G WHERE 平均分>85) -- method2 SELECT s.sno,s.sn,score FROM v_score s,v_avg_s_g s2 WHERE s.sno=s2.sno AND s2.平均分>85
-- (2) 查询各课程成绩均大于平均成绩的学生的学号、姓名、课程和成绩。 SELECT sno,sn,cno,score FROM v_score WHERE score>ANY(SELECT 平均分 FROM v_avg_c_g)
-- (3) 按系别统计各系平均成绩在 80 分以上的人数,结果按降序排列。 -- method1 SELECT dept 系别,COUNT(*) 总人数 FROM v_stu WHERE sno IN(SELECT sno FROM v_avg_s_g WHERE 平均分 >80) GROUPBY dept ORDERBY 人数 DESC
-- method2 SELECT dept,COUNT(*) 人数 from v_stu s,v_avg_s_g s2 WHERE s.sno=s2.sno AND s2.平均分 >80 GROUPBY dept ORDERBY 人数 DESC