数据库系统教程-课后答案(施伯乐)(第三版). 下载本文

{ t | R(t)∧ (u) (S(u) ∧ u[1]≠ t[2])}

不等价的关系代数表达式是

[ ]

A.π1,2(σ2≠3(R×S)) B.π1,2(σ2≠1(R×S))

C.π

1,2(R

?S) D.π

2≠1

3,4(σ1≠4(S×R))

18.在关系代数表达式的查询优化中,不正确的叙述是 [ ]

A.尽可能早地执行联接

B.尽可能早地执行选择 C.尽可能早地执行投影

D.把笛卡尔积和随后的选择合并成联接运算 2.3.3 计算题

1.设有关系R和S: R A B C S B C D 6 4 2 4 4 9 6 5 3 4 2 5 5 6 8 5 2 6 5 3 8 6 8 4

试计算:R?S , R2=1

?S,3=2

R?S, 1R>?3

S。

2.设有关系R和S: R A B C S D E F 2 4 6 3 6 9 3 2 1 3 4 5 7 4 4 4 4 7

试计算下面四个元组表达式的值: R1={ t | R(t)∧ t[2]<3 }

R2={ t | (u) (R(t) ∧ S(u) ∧ t[1]

R4={ t | (u)(v)(R(u) ∧ S(v) ∧ u[2]=v[2] ∧ t[1]=u[1] ∧ t[2]=v[3])}

3.在第2题的关系R和S中,试计算下面四个域表达式的值:

R1={ xyz | (u)(v)(R(xyz)∧ S(uzv)) }

R2={ xy | (u) (v)(w) (R(uxv) ∧ S(uwy) ∧ v>w )} R3={ xyz | (u)(?v) (R(xyz) ∧ S(uyv) ∧ x

R4={ xyz | (u)(v)(w)(R(xyu) ∧ S(vwz) ∧ u=w)}

4. 在第2题的关系R和S中,试计算下面四个规则的值:

规则1:W1(b)← R(a,b,c)∧ a>c

规则2:W2(a,b,c,d,f)← R(a,b,c)∧ S(d,b,f) 规则3:W3(a,b,c)← R(a,b,c)∧ S(d,e,f)∧ b>d 规则4:W4(a,b,c)← R(a,b,c)∧ ┐S(c,e,f)

2.4 自测题答案

2.4.1 填空题答案

1.关系被定义为一个集合 2.关系中主键值不允许重复 3.关系(或二维表) 文件 4.主键 外键 论(或集合代数) 谓词演算

6.∪、-、×、π和σ 7.无限关系 无穷验证

5.集合8.R和S没有公共属性 9.相同的关系模式(或相同的结构) 10.差 除法 11.左外联接 12.条件F只涉及到L中的属性

13.L1?L2

14.F只涉及到E2中的属性 15.F只涉及E1和E2中的公共属性

16.其关系存储在数据库中的谓词 由逻辑规则定义的谓词

17.出现在规则中任何地方的变量必须出现在某个非求反的关系子目标中 18.W=πC,A(R) 19.W=πA,B(σB≥'15'∧C='18'(R)) 20.W=π

1,4(R?S)

或 W=π3.D

8.A 13.A 18.A

1,6(σ2=4∧3=5(R×S))

2.4.2 单项选择题答案

1.D 2.A 6.D 7.B 11.D 12.D 16.B 17.B

2.4.3 计算题答案 1.答:

R?S

3=2

4.D 9.D 14.D 5.D 10.C 15.D

A B C D 6 6 5

4 5 6

2 3 8

5 8 4

R?S A R.B R.C S.B S.C D

2=1

6 6 6 6 5 4 4 5 5 6 2 2 3 3 8 4 4 5 5 6 4 2 2 3 8 9 5 6 8 4

R?S A R.B R.C S.B S.C D

6 4 6 4 6 5 5 6

1>3

2 2 3 8 4 5 5 6 2 2 3 8 5 6 8 4

R?S A R.B R.C S.B S.C D

6 4 6 4 6 5 6 5 5 6

2

2 3 3 8

4 6 4 6 6

2 8 2 8 8

5 4 5 4 4

2.答:

R1 A B C

R2 A B C R3 A B C R4 A F

3 2 1 3.答:

R1 A B C 2 4 6 7 4 4 R2 2 3 B 4 4 4 2 F 5 7 6 1 R3 A 2 3 3 7 B 4 2 2 4 C 6 1 1 4 R4 A 2 7 2 2 7 7 B 4 4 5 7 5 7 F 9 5 4.答: W1 R.A R.B R.C 3 2 1 7 4 4

W3 R.A R.B R.C 2 4 6 7 4 4

7

4

7

W2 R.A R.B R.C S.D S.F 2 4 6 3 5 2 4 6 4 7 7 4 4 3 5 7 4 4 3 7 W4 R.A R.B R.C 2 4 6 3 2 1

第3章 关系数据库语言SQL

3.1 基本内容分析

3.1.1 本章重要概念

(1)SQL数据库的体系结构,SQL的组成。

(2)SQL的数据定义:SQL模式、基本表和索引的创建和撤销。

(3)SQL的数据查询;SELECT语句的句法,SELECT语句的三种形式及各种限定,基本表的联接操作,SQL3中的递归查询。

(4)SQL的数据更新:插入、删除和修改语句。 (5)视图的创建和撤消,对视图更新操作的限制。

(6)嵌入式SQL:预处理方式,使用规定,使用技术,卷游标,动态SQL语句。 3.1.2 本章的重点篇幅

(1)教材中P97的例3.8(SELECT语句)。

(2)教材中P123的例3.31和P123的例3.32(嵌入式SQL)。 3.1.3 重要内容分析

SELECT语句是SQL的核心内容,对于该语句考生应掌握下列内容。 1.SELECT语句的来历

在关系代数中最常用的式子是下列表达式:

πA1,…,An(σF(R1×…×Rm))

这里R1、…、Rm为关系,F是公式,A1、…、An为属性。

针对上述表达式,SQL为此设计了SELECT—FROM—WHERE句型: SELECT A1,…,An FROM R1,…,Rm WHERE F

这个句型是从关系代数表达式演变来的,但WHERE子句中的条件表达式F要比关系代数中公式更灵活。

2.SELECT语句中出现的基本表名,应理解为基本表中的元组变量,而列名应理解为元组分量。

3.SELECT语句的语义有三种情况,下面以学生表S(S#,SNAME,AGE,SEX)为例说明。 第一种情况:SELECT语句中未使用分组子句,也未使用聚合操作,那么SELECT子句的语义是对查询的结果执行投影操作。譬如:

SELECT S#,SNAME FROM S

WHERE SEX='M';

第二种情况:SELECT语句中未使用分组子句,但在SELECT子句中使用了聚合操作,此时SELECT子句的语义是对查询结果执行聚合操作。譬如:

SELECT COUNT(*),AVG(AGE) FROM S

WHERE SEX='M';

该语句是求男同学的人数和平均年龄。

第三种情况:SELECT语句使用了分组子句和聚合操作(有分组子句时必有聚合操作),此时SELECT子句的语义是对查询结果的每一分组去做聚合操作。譬如:

SELECT AGE,COUNT(*)

FROM S WHERE SEX='M'

GROUP BY AGE;

该语句是求男同学每一年龄的人数。

4.SELECT语句中使用分组子句的先决条件是要有聚合操作。但执行聚合操作不一定要用分组子句。譬如求男同学的人数,此时聚合值只有一个,因此不必分组。

但同一个聚合操作的值有多个时,必须使用分组子句。譬如求每一年龄的学生人数。此时聚合值有多个,与年龄有关,因此必须分组。

3.2 教材中习题3的解答

3.1 名词解释

·基本表:实际存储在数据库中的表,称为基本表。

·视图:是从基本表或其他视图中导出的表,它本身不独立存储在数据库中,也就是数据库中只存放视图的定义而不存放视图的数据。

·实表:是对基本表的别称。 ·虚表:是对视图的别称。

·相关子查询:SELECT语句嵌套时,子查询中查询条件依赖于外层查询中的值,因此子查询要反复求值供外层查询使用。这种子查询称为相关子查询。

·联接查询:查询时要从多个基本表中提取数据,此时把多个基本表写在同一层的FROM子句中,这种查询形式称为联接查询。

·嵌套查询:查询时要从多个基本表中提取数据,此时把多个基本表分别放在不同层次上的FROM子句中,这种查询形式称为嵌套查询。

·交互式SQL:在终端交互方式使用的SQL语言。

·嵌入式SQL:嵌入在高级语言的程序中使用的SQL语言。

·共享变量:嵌入的SQL语句和主语言语句间传递信息的变量,称为共享变量。共享变量先由主语言程序定义,再用SQL的说明语句说明,然后SQL语句就可使用这些变量。

·游标:游标是与某一查询相联系的符号名。游标有游标关系和游标指针两层含义。在游标打开时,游标(指针)指向查询结果的第一个记录之前。

·卷游标:在游标推进时,可以进退自如的游标。 3.2 对于教学数据库的三个基本表 S(S#,SNAME,AGE,SEX) SC(S#,C#,GRADE) C(C#,CNAME,TEACHER)

试用SQL的查询语句表达下列查询:

①检索LIU老师所授课程的课程号和课程名。 ②检索年龄大于23岁的男学生的学号和姓名。

③检索学号为S3学生所学课程的课程名与任课教师名。

④检索至少选修LIU老师所授课程中一门课程的女学生姓名。 ⑤检索WANG同学不学的课程的课程号。 ⑥检索至少选修两门课程的学生学号。

⑦检索全部学生都选修的课程的课程号与课程名。 ⑧检索选修课程包含LIU老师所授课程的学生学号。 解:① SELECT C#, CNAME

FROM C

WHERE TNAME=’LIU’; ② SELECT S#, SNAME