数据库原理与应用教程第四版 第五章答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
免责声明:私人学习之余整理,如有错漏,概不负责
1.视图的优点
简化数据查询语句、使用户能从多角度看待同一数据、提高了数据的安全性、提供了一定程度的逻辑独立性
2.使用视图可以加快数据的查询速度吗?为什么?
不对。其本质上还是执行视图内部的查询语句,通过视图查询数据时,都是转换为对基本表的查询,其简化了数据查询语句但是并不能加快数据查询速度。
3.写出创建满足以下要求的视图的SQL语句。
1)查询学生的学号、姓名、所在系、课程号、课程名、课程学分。
CREATE VIEW v1(Sno,Sname,Sdept,Cno,Cname,Credit)
AS
SELECT s.Sno,Sname,Sdept,o,Cname,Credit
FROM Student s JOIN SC ON s.Sno = SC.Sno JOIN Course c ON o = o
2)查询学生的学号、姓名、选修的课程名和考试成绩。
CREATE VIEW v2(Sno,Sname,Cname,Grade)
AS
SELECT s.Sno,Sname,Cname,Grade
FROM Student s JOIN SC ON s.Sno = SC.Sno JOIN Course c ON o = o
3)统计每个学生的选课门数,列出学生学号和选课门数。
CREATE VIEW v3(Sno,选课门数)
AS
SELECT s.Sno,COUNT(*)
FROM Student s JOIN SC ON s.Sno = SC.Sno
GROUP BY Sno
4)统计每个学生的修课总学分,列出学生学号和总学分。(成绩大于等于60)
CREATE VIEW v4(Sno,总学分)
AS
SELECT s.Sno,SUM(Credit)
FROM Student s JOIN SC ON s.Sno = SC.Sno JOIN Course c ON o = o
WHERE Grade > 60
GROUP BY Sno
5)查询计算机系Java考试成绩最高的学生的学号、姓名和Java考试成绩。
CREATE VIEW v5(Sno,Cname,Grade)
AS
SELECT s.Sno,Sname,Grade
FROM Student s JOIN SC ON s.Sno = SC.Sno
WHERE Sdept = '计算机系'
AND Cno = (SELECT Cno FROM Course WHERE Cname = 'Java')
AND Grade = (SELECT MAX(Grade) FROM SC
WHERE Cno = (SELECT Cno FROM Course WHERE Cname = 'Java')
AND Sno IN (SELECT Sno FROM Student WHERE Sdept = '计算机系'))
4.利用3建立的视图,完成以下查询
1)查询考试成绩大于等于90的学生的姓名、课程名和成绩。
SELECT Sname,Cname,Grade
FROM v2
WHERE Grade >= 90
2)查询选课门数超过3门的学生的学号和选课门数。
SELECT Sno,选课门数
FROM v3
WHERE 选课门数> 3
3)查询计算机系选课门数超过3门的学生的姓名和选课门数。
SELECT Sname,选课门数
FROM v3 JOIN Student s ON v3.Sno = s.Sno
WHERE 选课门数> 3 AND Sdept = '计算机系'
4)查询修课学分超过10分的学生的学号、姓名、所在系和修课总学分。
SELECT s.Sno,Sname,Sdept,总学分
FROM v4 JOIN Student s ON v4.Sno = s.Sno
WHERE 总学分> 10
5)查询年龄大于等于20岁的学生中,修课总学分超过10分的学生的姓名、年龄、所在系和修课总学分。
SELECT Sname,Sage,Sdept,总学分
FROM v4 JOIN Student s ON v4.Sno = s.Sno
WHERE 总学分> 10 AND Sage >= 20
5.修改3中4)定义的视图,使其可以查询每个学生的学号、总学分以及总的选课门数。ALTER VIEW v4(Sno,总学分,选课门数)
AS
SELECT s.Sno,SUM(Credit),COUNT(*)
FROM Student s JOIN SC ON s.Sno = SC.Sno JOIN Course c ON o = o
WHERE Grade > 60
GROUP BY Sno
6.修改3中5)定义的视图,使其能统计全体学生中Java考试成绩最高的学生的学号、姓名、所在系和Java考试成绩。
ALTER VIEW v5(Sno,Sname,Sdept,Java成绩)
AS
SELECT s.Sno,Sname,Sdept,Grade
FROM Student s JOIN SC ON s.Sno = SC.Sno JOIN Course c ON o = o
WHERE Cname = 'Java'
AND Grade = (SELECT MAX(Grade) FROM SC WHERE Cno = (SELECT Cno FROM Course WHERE Cname = 'Java'))