数据库系统教程1-7章课后答案(施伯乐)(第二版)(5)

2019-07-30 13:39

FROM S, R RX, R RY

WHERE S.A=RX.A AND RX.B>RY.B;

3.6 试叙述SQL语言的关系代数特点和元组演算特点。 答:SQL的关系代数特点如下:

① 有关系代数运算的并、交、差、自然联接等运算符;

② FROM子句体现了笛卡尔积操作,WHERE子句体现了选择操作,SELECT子句体现

了投影操作。

SQL的元组演算特点如下:

① FROM子句中的基本表名应视为“元组变量”,属性名应视为“元组分量”; ② 有存在量词EXISTS符号。

3.7 试用SQL查询语句表达下列对3.2题中三个基本表S、SC、C的查询:

① 在表C中统计开设课程的教师人数。 ② 求选修C4课程的女学生的平均年龄。

③ 求LIU老师所授课程的每门课程的平均成绩。 ④ 统计每个学生选修课程的门数(超过5门的学生才统计)。要求输出学生学号和选修门

数,查询结果按门数降序排列,若门数相同,按学号升序排列。 ⑤ 检索学号比WANG同学大,而年龄比他小的学生姓名。 ⑥ 在表SC中检索成绩为空值的学生学号和课程号。 ⑦ 检索姓名以L打头的所有学生的姓名和年龄。 ⑧ 求年龄大于女同学平均年龄的男学生姓名和年龄。 ⑨ 求年龄大于所有女同学年龄的男学生姓名和年龄。 解:① SELECT COUNT(DISTINCT TEACHER) FROM C;

② SELECT AVG(AGE) FROM S, SC

WHERE S.S#=SC.S# AND C#=’C4’ AND SEX=’F’; ③ SELECT C.C#,AVG(GRADE) FROM SC,C

WHERE SC.C#=C.C# AND TEACHER=‘LIU’ GROUP BY C.C#;

④ SELECT S#, COUNT(C#) FROM SC

GROUP BY S#

HAVING COUNT(*)>5 ORDER BY 2 DESC, 1; ⑤ SELECT SNAME FROM S

WHERE S#>ALL(SELECT S# FROM S

WHERE SNAME=’WANG’) AND AGE

FROM S

WHERE SNAME=’WANG’);

⑥ SELECT S#, C# FROM SC

WHERE GRADE IS NULL;

(2003/9/21) (GJ-DA) (共2页) 目录--21

⑦ SELECT SNAME, AGE FROM S

WHERE SNAME LIKE ’L%’; ⑧ SELECT SNAME, AGE FROM S

WHERE SEX=’M’

AND AGE>(SELECT AVG(AGE)

FROM S

WHERE SEX=’F’);

⑨ SELECT SNAME, AGE FROM S

WHERE SEX=’M’ AND AGE>ALL(SELECT AGE

FROM S

WHERE SEX=’F’);

3.8 对于下面的关系R和S,试求出下列各种联接操作的执行结果:

① R NATURAL INNER JOIN S

② R NATURAL RIGHT OUTER JOIN S ③ R RIGHT OUTER JOIN S USING(C) ④ R INNER JOIN S

⑤ R FULL OUTER JOIN S ON false

R A B C S B C D a1 b1 c1 b1 c1 d1 a2 b2 c2 b2 c2 d2 a3 b3 c3 b4 c4 d4

解:

① A B C D ② A B C D ③ A R.B C S.B

b1 a1 b1 c1 d1 a1 b1 c1 d1 a1 b1 c1

b2 a2 b2 c2 d2 a2 b2 c2 d2 a2 b2 c2

b4 null b4 c4 d4 null null c4

④ A R.B R.C S.B S.C D ⑤ A R.B R.C S.B S.C

D

d1 d2 d4 D

(2003/9/21) (GJ-DA) (共2页) 目录--22

a1 b1 c1 b1 c1 d1 a1 b1 c1 null null null a1 b1 c1 b2 c2 d2 a2 b2 c2 null null null a1 b1 c1 b4 c4 d4 a3 b3 c3 null null null

c1 a2 b2 c2 b1 c1 d1 null null null b1 d1 c2 a2 b2 c2 b2 c2 d2 null null null b2 d2 c4 a2 b2 c2 b4 c4 d4 null null null b4 d4 a3 b3 c3 b1 c1 d1 a3 b3 c3 b2 c2 d2 a3 b3 c3 b4 c4 d4

3.9 SQL2提供CASE表达式操作,这个操作类似于程序设计语言中的多分支选择结构,其句

法如下: CASE

WHEN 条件1 THEN 结果1 WHEN 条件2 THEN 结果2

??

WHEN 条件n THEN 结果n

ELSE 结果m

END

如果自上而下“条件i”首先被满足,那么这个操作返回值“结果i”(可以是某个表达式的值);如果没有一个条件被满足,那么返回值“结果m”。 在基本表SC(S#,C#,GRADE)中,GRADE值是百分制。如果欲转换成“成绩等第”,则规则如下:若GRADE<40则等第为F,若40≤GRADE<60则等第为C,若60≤GRADE<80则等第为B,若80≤GRADE则等第为A。试写出下列两个查询语句: ① 检索每个学生的学习成绩,成绩显示时以等第(SCORE)形式出现。 ② 检索每个等第的学生人次数。 解:① SELECT S#,C#,CASE

WHEN GRADE >= 80 THEN 'A' WHEN GRADE >= 60 THEN 'B' WHEN GRADE >= 40 THEN 'C' ELSE 'F' END AS SCORE

FROM SC;

② SELECT SCORE,COUNT(S#)

FROM (SELECT S#,C#,CASE

WHEN GRADE >= 80 THEN 'A' WHEN GRADE >= 60 THEN 'B' WHEN GRADE >= 40 THEN 'C'

(2003/9/21) (GJ-DA) (共2页) 目录--23

ELSE 'F'

END

FROM SC) AS RESULT(S#,C#,SCORE) GROUP BY SCORE;

3.10 用第3.9题给出的CASE操作在下列更新语句中完成SC表中的元组更新:

① 若课程号为C5则增加6分,若课程号为C8则增加10分,其他一律增加5分。 ② 若C4课程的成绩低于该门课平均成绩时,提高5%,否则提高4%。 解:① UPDATE SC

SET GRADE = GRADE + CASE

WHEN C# ='C5' THEN 6 WHEN C# ='C8' THEN 10 ELSE 5 END ;

② UPDATE SC

SET GRADE = GRADE * CASE

WHEN GRADE <(SELECT AVG(GRADE)

FROM SC

WHERE C# ='C4')

THEN 1.05 ELSE 1.04 END

WHERE C# ='C4';

3.11 设零件之间有组合联系,其关系模式如下:

PART(P#,PNAME,SUBP#,TOTAL)

其属性表示零件编号、零件名称、所需子零件编号及数量。设临时关系W(P#,SUBP#)的属性分别表示零件编号、这种零件的直接或间接子零件编号。 ① 试写出表示关系W的规则。 ② 写出计算W的递归查询语句。 解:① W(x, y)←PART(x, g, y, h)

W(x, y)←W(x, z)∧ W(z, y) ② WITH RECURSIVE W(P#, SUBP#) AS (SELECT P#, SUBP# FROM PART) UNION

(SELECT W1.P#, W2.SUBP# FROM W AS W1, W AS W2 WHERE W1.SUBP#=W2.P#) SELECT * FROM W;

3.12 试用SQL更新语句表达对3.2题教学数据库中关系S、SC、C的更新操作:

① 往关系C中插一个课程元组('C8','VC++','BAO')。

② 检索所授每门课程平均成绩均大于80分的教师姓名,并把检索到的值送往另一个已

(2003/9/21) (GJ-DA) (共2页) 目录--24

存在的表FACULTY(TNAME)。

③ 在SC中删除尚无成绩的选课元组。

④ 把选修LIU老师课程的女同学选课元组全部删去。 ⑤ 把MATHS课不及格的成绩全改为60分。

⑥ 把低于所有课程总平均成绩的女同学成绩提高5%。

⑦ 在表SC中修改C4课程的成绩,若成绩小于等于70分时提高5%,若成绩大于70 分时提高4%(用两种方法实现,一种方法是用两个UPDATE语句实现,另一种方法是用带CASE操作的一个UPDATE语句实现)。

⑧ 在表SC中,当某个成绩低于全部课程的平均成绩时,提高5%。 解:① INSERT INTO C

VALUES('C8','VC++','BAO');

② INSERT INTO FACULTY(TNAME)

SELECT DISTINCT TEACHER

FROM (SELECT TEACHER, C.C#, AVG(GRADE)

FROM S, SC

WHERE SC.C#=C.C#

GROUP BY TEACHER, C.C#)

AS RESULT(TEACHER, C#, AVG_GRADE) AS X WHERE 80<=ALL(SELECT AVG_GRADE

FROM RESULT AS Y

WHERE Y.TEACHER=X.TEACHER);

③ DELETE FROM SC

WHERE GRADE IS NULL; ④ DELETE FROM SC

WHERE S# IN(SELECT S# FROM S WHERE SEX='F')

AND C# IN(SELECT C# FROM C WHERE TEACHER='LIU'); ⑤ UPDATE SC

SET GRADE=60 WHERE GRADE<60

AND C# IN(SELECT C# FROM C WHERE CNAME='MATHS'); ⑥ UPDATE SC

SET GRADE=GRADE*1.05

WHERE S# IN(SELECT S# FROM S WHERE SEX='F') AND GRADE<(SELECT AVG(GRADE) FROM SC); ⑦ 用两个UPDATE语句实现:

UPDATE SC

SET GRADE=GRADE*1.04

WHERE C#='C4' AND GRADE>70; UPDATE SC

SET GRADE=GRADE*1.05

(2003/9/21) (GJ-DA)2页)--25

(共 目录


数据库系统教程1-7章课后答案(施伯乐)(第二版)(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中国园林观赏植物造景应用的综述

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: