数据库原理与应用教程第四版 第五章答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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'))

相关文档
最新文档