5、关系代数运算有哪两大类,试说明每种运算的操作含义。 解:
1)关系代数的运算按运算符的不同主要分为传统的集合运算和专门的关系运算两类。 (1)传统的集合运算:包括并、交、差、广义笛卡尔积四种运算。 (2)专门的关系运算:包括选择、投影、连接、除等。 2)各运算的操作含义
(1)并:设关系R和关系S具有相同的目n,且相应的属性取自同一个域,则关系R与关系S的并由属于R或属于S的所有元组组成。记作:R∪S={t|t?R∨t?S}
(2)差:设关系R和关系S具有相同的目n,且相应的属性取自同一个域,则关系R与关系S的差由属于R而不属于S的所有元组组成。记作:R-S={t| t?R∧t?S }
(3)交:设关系R和关系S具有相同的目n,且相应的属性取自同一个域,则关系R与关系S的交由既属于R又属于S的所有元组组成。记作:R∩S={t| t?R∧t?S}
(4)广义笛卡尔积:两个分别为n目和m目的关系R和S的广义笛卡尔积是一个(n+m)列的元组的集合。元组的前n列是关系R的一个元组,后m列是关系S的一个元组。若R有k1个元组,S有k2个元组,则关系R和关系S的广义笛卡尔积有k1×k2个元组。记作:
︵
R×S={trts| tr?R∧ts?S}
(5)选择:选择又称为限制(Restriction)。它是在关系R中选择满足给定条件的诸元组,记作:
?F(R) = {t|t∈R∧F(t)=“真”}
(6)投影:关系R上的投影是从R中选择出若干属性列组成新的关系。记作: ∏A(R) = { t[A] | t?R } (7)连接:
连接也称为θ连接。它是从两个关系的广义笛卡尔积中选取属性间满足一定条件的元
︵
组。记作:={ trts|tr∈R∧ts∈S∧tr[A]θts[B] }
R?S?ABθ为”=”的连接运算称为等值连接。它是从关系R与S的广义笛卡尔积中选取A、B属性值相等的那些元组。等值连接表示为:
︵
={ trts|tr∈R∧ts∈S∧tr[A]=ts[B]}。为此:=?A=B(R×S)
R?SA?BR?SA?B自然连接(Natural join)是一种特殊的等值连接,它要求两个关系中进行比较的分量
必须是相同的属性组,并且要在结果中把重复的属性去掉。即若R和S具有相同的属性组B,则自然连接可记作:
︵ -
R∞S={ tr ts[B]|tr∈R∧ts∈S∧tr[B]=ts[B]}。为此:R∞S=∏B- (?R.B=S.B(R×S)) (8)除:给定关系R(X,Y)和S(Y,Z),其中X,Y,Z为属性组。R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域。R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影:元组在X上分量值x的象集Yx包含S在Y上投影的集合。记作:P=R÷S ={tr[X]|tr∈R∧Yx?∏Y(S)},其中Yx为x在R中的象集,x=tr[X]。
6、关系代数的基本运算有哪些?请用基本运算表示非基本运算。 解:
1)8种关系代数运算中并、差、广义笛卡尔积、投影和选择5种运算为基本的关系代数运算。
21
数据库原理及应用 2)另外3种运算,即交、连接和除为非基本运算,均可以用这5种基本运算来表达。表达如下:
(1)R∩S=R-(R-S) 或 R∩S=S-(S-R) (2)
=?R?S?ABAθB
(R×S)
R?S=?A?BA=B
(R×S)
R.B=S.B
R∞S=∏-(?B
(R×S))
(3)
R÷S =∏X(R)-∏X(∏X(R)×∏Y(S)-R)
7、举例说明等值连接与自然连接的区别与联系。
解:
θ为”=”的连接运算称为等值连接。它是从关系R与S的广义笛卡尔积中选取A、B属性值相等的那些元组。等值连接表示为:
︵
={ trts|tr∈R∧ts∈S∧tr[A]=ts[B]}。为此:=?A=B(R×S)
R?SA?BR?SA?B自然连接(Natural join)是一种特殊的等值连接,它要求两个关系中进行比较的分量
必须是相同的属性组,并且要在结果中把重复的属性去掉。即若R和S具有相同的属性组B,则自然连接可记作:
︵ -
R∞S={ tr ts[B]|tr∈R∧ts∈S∧tr[B]=ts[B]}。为此:R∞S=∏B- (?R.B=S.B(R×S)) 一般的连接操作是从行的角度进行运算。但自然连接还需要取消重复列,所以是同时从行和列的角度进行运算。
举例: 设图2.10(a)和图2.10(b)分别为关系R和关系S, 图2.10(d)为等值连接R∞S的结果,图2.10(e)为自然连接R∞S的结果。从中能明显看
R.B=S.B
出其列数的不同。
R S
A a1 a1 a2 a2 B b1 b2 b3 b4 C 5 6 8 12
B b1 b2 b3 b3 E 3 7 10 2 b5 2
(a) (b)
R ∞ S R∞S
R.B=S.B
22
A R.B C S.B a1 b1 a1 b2 a2 b3 a2 b3 5 6 8 8 b1 b2 b3 b3 E 3 7 10 2 A B C 5 6 8 E 3 7 10 2 a1 b1 a1 b2 a2 b3 a2 b3 8
(d) (e)
图2.10 连接运算举例
8、设有关系R、S(如下表所示),计算:
R S A B C C D E 3 6 7 3 4 5 4 5 7 6 2 3 6 2 3 5 4 3
(1) R1 =R S (2) R2=R S
2<2
? (3) R3 =B=D(R×S)
解: (1)
A B C D E 6 2 3 4 5 5 4 3 4 5
(2) A B R.C S.C D E 6 2 3 3 4 5
(3) 结果同(2)
9、请用抽象的元组关系演算表达式表达第8题中的R1、R2与R3关系。 解:
(1)R1= {t|(?u)(?v)( R(u)∧S(v)∧t[1]= u[1]∧t[2]= u[2]∧t[3]= u[3]∧t[4]= v[2]∧t[5]=v[3]∧u[3]= v[1])}
(2)R2= {t|(?u)(?v)( R(u)∧S(v)∧t[1]= u[1]∧t[2]= u[2]∧t[3]= u[3]∧t[4]= v[1]∧t[5]= v[2]∧t[6]=v[3]∧u[2]= v[2])}
(3)同(2)
10、设有学生-课程关系数据库,它由三个关系组成,它们的模式是:学生S(学号SNO,姓名SN,所在系DEPT,年龄AGE)、课程C(课程号CNO,课程名CN,先修课号CPNO)、SC(学号SNO,课程号CNO,成绩SCORE)。
请用关系代数与ALPHA语言分别写出下列查询: (1) 检索学生的所有情况。
(2) 检索学生年龄大于等于20岁的学生姓名。
23
数据库原理及应用 (3) 检索先修课号为C2的课程号。
(4) 检索选修了课程号C1成绩为A的所有学生姓名。 (5) 检索学号为S1的学生修读的所有课程名及先修课号。 (6) 检索年龄为23岁的学生所修读的课程名。
(7) 检索至少修读了学号为S5的学生修读的一门课的学生的姓名。 (8) 检索修读了学号为S4的学生所修读的所有课程的学生的姓名。 (9) 检索选修所有课程的学生的学号。 (10) 检索不选修任何课程的学生的学号。
(11) 在关系C中增添一门新课(新课信息自定)
(12) 学号为S17的学生因故退学请在S与SC中将其除名。
(13) 将关系S中学生S6的年龄改为22岁(只需ALPHA操作)。 (14) 将关系S中学生的年龄均增加1岁(只需ALPHA操作)。 解:
写出关系代数表达方式:
(1) 检索学生的所有情况。 S 或 SSCC
(2) 检索学生年龄大于等于20岁的学生姓名。
ππππππππ
SN(
σ
AGE>=20(S))
(3) 检索先修课号为C2的课程号。
CNO(
σ
CPNO=?C2?(C))
(4) 检索选修了课程号C1成绩为A的所有学生姓名。
SN(
σ
CNO=?C1?∧SCORE=?A?(SCS))
(5) 检索学号为S1的学生修读的所有课程名及先修课号。
CN,CPNO (
σ
SNO=?S1?(SCC))
(6) 检索年龄为23岁的学生所修读的课程名。
CN (
σ
AGE=23(SSCC))
(7) 检索至少修读了学号为S5的学生修读的一门课的学生的姓名。
SN (S
SCπCNO (
σ
SNO=?S5?(SC)))
(8) 检索修读了学号为S4的学生所修读的所有课程的学生的姓名。
SN (S
(π
SNO,CNO (SC)÷
π
CNO (
σ
SNO=?S4?(SC))))
(9) 检索选修所有课程的学生的学号。
SNO,CNO (SC)÷
π
CNO (C)
24