《数据库原理与应用》(孟凡荣 闫秋艳)课后习题答案

内容发布更新时间 : 2024/5/20 12:10:04星期一 下面是文章的全部内容请认真阅读。

3-5讨论当对一个视图进行更新的时候可能会出现什么样的问题? 答:

1) 若视图的属性来自属性表达式或常数,则不允许对视图执行INSERT和UPDATE操作,

但允许执行DELETE操作。

2) 若视图的属性来自库函数,则不允许对此视图更新。

3) 若视图定义中有GROUP BY子句,则不允许对此视图更新。 4) 若视图定义中有DISTINCT任选项,则不允许对此视图更新。

5) 若视图定义中有嵌套查询,并且嵌套查询的FROM子句涉及导出该视图的基本表,

则不允许对此视图更新。

6) 若视图由两个以上的基本表导出,则不允许对此视图更新。

7) 如果在一个不允许更新的视图上再定义一个视图,这种二次视图是不允许更新的。

3-6设有两个基本表R(A,B,C) 和 S(A,B,C)试用SQL查询语句表达下列关系代数表达式:

⑴ R∩S ⑵ R-S ⑶R∪S ⑷ R×S

(1) (select * from R) INTERSECT (select * from S) (2) (select * from R) EXCEPT (select * from S) (3) (select * from R) UNION (select * from S) (4) select * from R,S

3-7对于教学数据库的三个基本表:

S(学号,姓名 ,年龄,性别) SC(学号 ,课程号,成绩)

C(课程号 ,课程名,任课教师姓名) 试用SQL语句表达下列查询:

⑴ 查询“刘某”老师所授课程的课程号和课程名。 ⑵ 查询年龄大于23岁的男同学的学号和姓名。

⑶ 查询学号为S3的学生所学课程的课程号、课程名和任课教师姓名。 ⑷ 查询“张小飞”没有选修的课程号和课程名。 ⑸ 查询至少选修了3门课程的学生的学号和姓名。 ⑹ 查询全部学生都选修了的课程编号和课程名称。 ⑺ 在SC中删除尚无成绩的选课元组。

⑻ 把“高等数学”课的所有不及格成绩都改为60。 ⑼ 把低于总评均成绩的女同学的成绩提高5%。 ⑽ 向C中插入元组(‘C8’,‘VC++’,‘王昆’)。 3-7

(1) 查询“刘某”老师所授课程的课程号和课程名; SELECT课程号, 课程名 FROM C

WHERE任课教师姓名LIKE '刘*'

(2) 查询年龄大于23岁的男同学的学号和姓名; SELECT 学号,姓名 FROM S

WHERE 年龄>23 AND 性别='男'

16

(3) 查询学号为S3的学生所学课程和课程号,课程名和任课教师姓名 SELECT C.课程号, 课程名, 任课教师姓名 FROM C, SC

WHERE SC.学号='S3' And C.课程号=SC.课程号

(4) 查询“张小飞”同学没有选修的课程的课程号和课程名; SELECT C.课程号, C.课程名 FROM C

WHERE 课程号 NOT IN (SELECT 课程号 FROM SC

WHERE 学号 IN

(SELECT 学号 FROM S WHERE 姓名='张小飞')); 或者 SELECT * FROM C

WHERE NOT EXISTS (SELECT SC.课程号 FROM SC,S

WHERE SC.课程号=C.课程号 AND S.学号=SC.学号 AND S.姓名='张小飞') 或者 SELECT * FROM C

WHERE 课程号 NOT IN (SELECT 课程号 FROM SC,S

WHERE S.学号=SC.学号 AND S.姓名='张小飞')

(5) 查询至少选修了3门课程的学生的学号和姓名; SELECT 学号, 姓名 FROM S

WHERE 学号 IN (SELECT 学号 FROM SC

GROUP BY 学号

HAVING COUNT (课程号)>=3)

(6) 查询全部学生都选修了的课程号和课程名; SELECT 课程号,课程名 FROM C

WHERE NOT EXISTS (SELECT 学号

17

FROM S

WHERE NOT EXISTS (SELECT 学号 FROM SC

WHERE SC.课程号=C.课程号 AND S.学号=SC.学号)) 或者

SELECT 课程号, 课程名 FROM C

WHERE NOT EXISTS ((SELECT 学号 FROM S) EXCEPT (SELECT 学号 FROM SC

WHERE SC.课程号=C.课程号))

(7) 在SC表中删除无成绩的选课纪录; DELETE * FROM SC

WHERE GRADE is null;

(8) 把“高等数学”的所有不及格成绩都改为60分; UPDATE SC SET 成绩 = 60

WHERE GRADE< 60 AND 课程号 = (SELECT 课程号 FROM C

WHERE 课程名='高等数学')

(9) 把低于总平均成绩的女同学的成绩提高5% UPDATE sc

SET 成绩 = 成绩*(1+0.05) WHERE 学号 in

(select 学号 from s where 性别='女') and 成绩 < (select avg(成绩) from sc);

(10) 向C中插入元组(“C8”,“VC++”,“王昆”) INSERT INTO c

VALUES ('C8', 'VC++', '王昆');

3-8图3-2中显示的数据库模式Library,用来记录书籍、借书人和书籍借出的情况,参照完整性在图中用有向弧来表示,请用SQL语言建立图中的关系模式,并完成下列操作:

18

图3-2 Library数据库模式

⑴ 查询“高等教育出版社”出版的所有图书名称和编号; ⑵ 查询所有作者是“郭雨辰”的图书的编号和名称; ⑶ 查询“李明”借过的所有图书的名称;

⑷ 查询“李明”从2008年1月1日到2009年1月1日期间借过的图书名称;

⑸ 列出从2008年1月1日到2009年1月1日期间没有被人借过的图书名称和编号; ⑹ 列出从2008年1月1日到2009年1月1日期间借出次数最多的10本图书名称; ⑺ 将“高等教育出版社”的电话改为“010-64054588”; 3-8 (1)

SELECT BookID , Title FROM Book

WHERE PublishName=’高等教育出版社’ (2)

SELECT BookID, Title FROM BookID, Book

WHERE Book.BookID=Author.BookID AND Author=’郭雨辰’ (3)

SELECT Title

FROM Book, Borrow, Borrower WHERE Borrow.CardID=Borrower.CardID AND Borrow.BookID=Book.BookID AND Borrower.Name=’李明’ (4)

SELECT Title

FROM Book, Borrow, Borrower

WHERE Borrow.CardID=Borrower.CardID AND Borrow. BookID=Book.BookID AND Borrower.Name=’李明’ AND DateOut BETWEEN 2008-1-1 AND.2009-1-1 (5)

SELECT Title

19

FROM Book

WHERE NOT EXISTS (SELECT *

FROM Borrow,Book

WHERE Borrow. BookID=Book.BookID AND Dateout Between 2008-1-1 AND 2009-1-1) (6)

SELECT top 10 Title FROM Book, Borrow

WHERE Borrow. BookID=Book.BookID AND Dateout Between 2008-1-1 AND 2009-1-1 GROUP BY Book.BookID

ORDER BY Book.BookID DESC (7)

UPDATE Publisher

SET Phone=’010-64054588’

WHERE Name=’高等教育出版社’

3-9 针对3.8建立的表,用SQL语言完成下列操作: ⑴ 把对所有表的INSERT权限授予“张丽”,并允许她将此权限授予其他用户; Grant INSERT to ‘张丽’ with grant option

⑵ 把查询和修改BORROWER的权限受给用户“王伟”。 Grant select, update on BORROWER to ‘王伟’

20

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4 ceshi