【重点与难点】
关系代数操作:集合操作 和 纯关系操作。
AND
、OR
、NOT
,这就是一些指令;某些关系代数操作,如并、差、交等,需满足 “并相容性” 。
参与运算的两个关系及其相关属性之间有一定的对应性、可比性或意义关联性。
【定义】关系 R \mathbf R R 与关系 S \mathbf S S 存在 并相容性,当且仅当:
(1) 关系 R \mathbf R R 和关系 S \mathbf S S 的 属性数目必须相同;
(2) 对于 任意 i i i,关系 R \mathbf R R 的第 i i i 个属性的域必须和关系 S \mathbf S S 的第 i i i 个属性的域相同。
假设: R ( A 1 , A 2 , … , A n ) \mathbf R(A_1, A_2, … , A_n) R(A1,A2,…,An), S ( B 1 , B 2 , … , B m ) \mathbf S(B_1, B_2, … ,B_m) S(B1,B2,…,Bm),
R \mathbf R R 和 S \mathbf S S 满足 并相容性: n = m n = m n=m 并且 D o m a i n ( A i ) = D o m a i n ( B i ) Domain(A_i) = Domain(B_i) Domain(Ai)=Domain(Bi)。
【并相容性的示例】
STUDENT(SID char(10), Sname char(8), Age char(3))
PROFESSOR(PID char(10), Pname char(8), Age char(3))
关系 S T U D E N T \mathbf {STUDENT} STUDENT 与关系 P R O F E S S O R \mathbf {PROFESSOR} PROFESSOR 是相容的,因为:
(1) 关系 R \mathbf R R 和关系 S \mathbf S S 的属性数目都是3;
(2) 关系 R \mathbf R R 的属性 SID
与关系 S \mathbf S S 的属性 PID
的域都是 char(10)
;
(3) 关系 R \mathbf R R 的属性 Sname
与关系 S \mathbf S S 的属性 Sname
的域都是 char(8)
;
(4) 关系 R \mathbf R R 的属性 Age
与关系 S \mathbf S S 的属性 Age
的域都是 char(3)
。
定义:假设关系 R \mathbf R R 和关系 S \mathbf S S 是并相容的,则关系 R \mathbf R R 与关系 S \mathbf S S 的并运算结果也是一个关系,记作: R ∪ S \mathbf R∪\mathbf S R∪S,它由或者出现在关系 R \mathbf R R 中,或者出现在 S \mathbf S S 中的元组构成。
数学描述: R ∪ S = { t ∣ t ∈ R ∨ t ∈ S } \mathbf R∪\mathbf S = \{ t | t ∈ \mathbf R \vee t ∈ \mathbf S \} R∪S={t∣t∈R∨t∈S},其中 t t t 是元组。
并运算是将两个关系的元组合并成一个关系,在 合并时去掉重复的元组。
R ∪ S \mathbf R ∪\mathbf S R∪S 与 S ∪ R \mathbf S ∪\mathbf R S∪R 运算的结果是同一个关系。
【并操作的示例一】(抽象的)
假设 R \mathbf R R 与 S \mathbf S S 是并相容的两个关系,则 R ∪ S \mathbf R \cup \mathbf S R∪S 是几个元组呢?
【并操作的示例二】(语义的)
查询或者参加体育队 或者 参加文艺队所有学生的信息:
【并操作的示例三】(语义的)
若 R \mathbf R R 为计算机学院的学生, S \mathbf S S 为材料学院的学生,
则: R ∪ S \mathbf R ∪\mathbf S R∪S 为两院所有的学生。
若 R \mathbf R R 为学过数据库课程的学生, S \mathbf S S 为学过自控理论课程的学生,
则: R ∪ S \mathbf R∪\mathbf S R∪S 为学过两门课之一的所有学生。
汉语中的 “或者…或者…” 通常意义是 并运算 的要求。
定义:假设关系 R \mathbf R R 和关系 S \mathbf S S 是并相容的,则关系 R \mathbf R R 与关系 S \mathbf S S 的差运算结果也是一个关系,记作: R − S \mathbf R - \mathbf S R−S,它由出现在关系 R \mathbf R R 中但不出现在关系 S \mathbf S S 中的元组构成。
数学描述: R − S = { t ∣ t ∈ R ∧ t ∉ S } \mathbf R - \mathbf S = \{ t | t ∈ \mathbf R \wedge t \notin \mathbf S \} R−S={t∣t∈R∧t∈/S},其中 t t t 是元组。
R − S \mathbf R - \mathbf S R−S 与 S − R \mathbf S - \mathbf R S−R 是不同的。
【差操作的示例一】(抽象的)
假设 R \mathbf R R 与 S \mathbf S S 是并相容的两个关系,则 R − S \mathbf R - \mathbf S R−S 是? S − R \mathbf S - \mathbf R S−R 是?
很明显, R − S \mathbf R - \mathbf S R−S 就是从关系 R \mathbf R R 中去掉关系 S \mathbf S S 中的元组, S − R \mathbf S - \mathbf R S−R 就是从关系 S \mathbf S S 中去掉关系 R \mathbf R R 中的元组。
【差操作的示例二】(语义的)
【差操作的示例三】(语义的)
若 R \mathbf R R 为计算机学院的学生, S \mathbf S S 为四年级的学生,则:
若 R \mathbf R R 为学过数据库课程的学生, S \mathbf S S 为学过自控理论课程的学生, 则:
汉语中的 “是…但不含…” 通常意义是 差运算 的要求。
定义:关系 R ( < a 1 , a 2 , … , a n > ) \mathbf R (
数学描述: R × S = { < a 1 , a 2 , … , a n , b 1 , b 2 , … , b m > ∣ < a 1 , a 2 , … , a n > ∈ R ∧ < b 1 , b 2 , … , b m > ∈ S } \mathbf R × \mathbf S = \{
| R×S={<a1,a2,…,an,b1,b2,…,bm>∣<a1,a2,…,an> ∈R ∧<b1,b2,…,bm> ∈S}\ \in \mathbf{R} \ \wedge \ \in \mathbf{S} \}
【广义积操作的示例一】(抽象的)
关系 R \mathbf R R 的元组数目是3,度数是3;关系 S \mathbf S S 的元组数目是4,度数是3;则 R × S \mathbf R × \mathbf S R×S 的元组数目是12,度数是6 ?
【广义积操作的示例二】 (抽象的)
【广义积操作的示例二】(语义的)
当 一个检索涉及到多个表 时(如学生表和课程表),便 需要将这些表串接或
拼接起来,然后才能检索,这时,就要使用广义笛卡尔积运算,是后面学习各种连接运算的基础。
R × S = S × R \mathbf R × \mathbf S = \mathbf S × \mathbf R R×S=S×R
即元组的前 n n n 个分量是 R \mathbf R R 中元组的分量,后 m m m 个分量是 S \mathbf S S 中元组的分量( R × S \mathbf R × \mathbf S R×S 是 n + m n+m n+m 度关系)。
定义:给定一个关系 R \mathbf R R,同时给定一个选择的条件 condition(简记 con),选
择运算结果也是一个关系,记作 σ c o n ( R ) \sigma_{con}( \mathbf R) σcon(R) ,它从关系 R \mathbf R R 中选择出满足给定条件 condition 的元组构成。
数学描述: σ c o n ( R ) = { t ∣ t ∈ R ∧ c o n ( t ) = ‘ t r u e ’ } \sigma_{con}( \mathbf R) = \{ t | t \in R \wedge con(t) = ‘true’ \} σcon(R)={t∣t∈R∧con(t)=‘true’}
- 设 R ( A 1 , A 2 , … , A n ) \mathbf R(A_1 ,A_2 , … ,A_n) R(A1,A2,…,An), t t t 是 R \mathbf R R 的元组, t t t 的分量记为 t [ A i ] t[A_i] t[Ai],或简写为 A i A_i Ai
- 条件 c o n con con 由逻辑运算符连接比较表达式组成;
- 逻辑运算符: ∨ \vee ∨, ∧ \wedge ∧, ¬ \neg ¬ 或 写为 and,or,not;
- 比较表达式: X θ Y X \theta Y XθY,其中 X X X, Y Y Y 是 t t t 的分量、常量或简单函数, θ \theta θ 是比较运算符, θ ∈ { > , ≥ , < , ≤ , = , ≠ } \theta \in \{ > , ≥, < , ≤ , = , ≠ \} θ∈{>,≥,<,≤,=,=}
【选择操作的示例一】(抽象的)
【选择操作的示例二】(语义的)
【选择操作的示例三】(语义的)
【选择操作的示例四】(语义的)
例如:
Sage<20 ∨ Sage>18 ∧ D# = “03”
与 (Sage<20 ∨ Sage>18) ∧ D# = “03”
定义:给定一个关系 R \mathbf R R,投影运算结果也是一个关系,记作 ∏ A ( R ) \prod _A(\mathbf R) ∏A(R) ,它从关系 R \mathbf R R 中 选出属性包含在 A A A 中的列 构成。
数学描述: ∏ A i 1 , A i 2 , … , A i k ( R ) = { < t [ A i 1 ] , t [ A i 2 ] , … , t [ A i k ] > ∣ t ∈ R } \prod_{A_{i1}, A_{i2}, … ,A_{ik}}(R) = \{
| \ t \in \mathbf R \} ∏Ai1,Ai2,…,Aik(R)={<t[Ai1],t[Ai2],…,t[Aik]>∣ t∈R}
- 设 R ( A 1 , A 2 , … , A n ) \mathbf R(A_1 ,A_2 , … ,A_n) R(A1,A2,…,An)
- { A i 1 , A i 2 , … , A i k } ⊆ { A 1 , A 2 , … , A n } \{ A_{i1}, A_{i2}, … ,A_{ik} \} \subseteq \{ A_1 ,A_2 , … ,A_n \} {Ai1,Ai2,…,Aik}⊆{A1,A2,…,An}
- t [ A i ] t[A_i] t[Ai] 表示元组 t t t 中相应于属性 A i A_i Ai 的分量;
投影运算可以 对原关系的列在投影后重新排列。
【投影 VS 选择】
投影操作 从给定关系中 选出某些列 组成新的关系,而 选择操作 是从给定关系中 选出某些行 组成新的关系。
【投影操作的示例一】(抽象的)
投影出 A 3 A_3 A3 列的元组?
投影出 A 3 , A 1 A_3,A_1 A3,A1 两列的元组?
如果 投影后有重复元组,则应去掉。
【投影操作的示例二】(语义的)
【投影与选择操作一起使用的示例】(语义的)
关系代数的基本书写思路:
定义:假设关系 R \mathbf R R 和关系 S \mathbf S S 是并相容的,则关系 R \mathbf R R 与关系 S \mathbf S S 的交运算结果也是一个关系,记作: R ∩ S \mathbf R ∩\mathbf S R∩S,它由同时出现在关系 R \mathbf R R 和关系 S \mathbf S S 中的元组构成。
数学描述: R ∩ S = { t ∣ t ∈ R ∧ t ∈ S } \mathbf R ∩ \mathbf S = \{ t \ | \ t \in R \ \wedge t \in S \} R∩S={t ∣ t∈R ∧t∈S},其中 t t t 是元组
【交操作的示例一】(抽象的)
假设 R \mathbf R R 与 S \mathbf S S 是并相容的两个关系,则 R ∩ S \mathbf R ∩ \mathbf S R∩S ?
【交操作的示例二】(语义的)
查询既参加体育队又参加文艺队的学生信息:
【交操作的示例三】(语义的)
汉语中的 “既…又…”,“…, 并且…” 通常意义是 交运算 的要求。
投影与选择操作只是对单个关系(表)进行操作,而实际应用中往往涉及多个表之间的操作,这就需要 θ \theta θ-连接操作。
比如:查询数据结构成绩在90分以上的学生姓名(涉及 S t u d e n t \mathbf Student Student(学生姓名), C o u r s e \mathbf Course Course(数据结构), S C \mathbf SC SC(成绩))
定义:给定关系 R \mathbf R R 和关系 S \mathbf S S, R \mathbf R R 与 S \mathbf S S 的 θ \theta θ 连接运算结果也是一个关系,记作,它由关系 R \mathbf R R 和关系 S \mathbf S S 的笛卡尔积中,选取 R \mathbf R R 中属性 A A A 与 S \mathbf S S 中属性 B B B 之间满足 θ \theta θ 条件的元组构成。
- 设 R ( A 1 , A 2 , … , A n ) , A ∈ { A 1 , A 2 , … , A n } \mathbf R(A_1 ,A_2 , … ,A_n), A \in \{ A_1 ,A_2 , … ,A_n \} R(A1,A2,…,An),A∈{A1,A2,…,An}
- S ( B 1 , B 2 , … , B m ) , B ∈ { B 1 , B 2 , … , B m } \mathbf S(B_1 ,B_2 , … ,B_m), B \in \{ B_1 ,B_2 , … ,B_m \} S(B1,B2,…,Bm),B∈{B1,B2,…,Bm}
- t t t 是关系 R \mathbf R R 中的元组, s s s 是关系 S \mathbf S S 中的元组
- 属性 A A A 和属性 B B B 具有可比性
- θ \theta θ 是比较运算符, θ ∈ { > , ≥ , < , ≤ , = , ≠ } \theta \in \{ > , ≥ , < , ≤ , = , ≠ \} θ∈{>,≥,<,≤,=,=}
在实际应用中, θ \theta θ-连接操作经常与投影、选择操作一起使用。
【 θ \theta θ-连接( θ \theta θ-Join)操作的示例一】(抽象的)
【 θ \theta θ-连接操作的示例二】(语义的)
员工表 Worker(W#, Wname, Wsex, Wage, Degree)
,职位限定表 Position(Type, Limited_Degree)
,竞聘的岗位必须由不低于其最低学历要求的人员担任,
找出 所有员工的姓名 及其可能 竞聘职位 的名称:
(degree >= limited_degree)
条件 的元组;(Wname, Type)
上进行投影操作,得到最终的结果。【 θ \theta θ-连接操作的示例三】(续)
关系与自身的 θ \theta θ-连接:查询至少 98030101
号同学和 98040202
号同学学过的所有课程号:
注:上式 ρ S C 1 ( S C ) \rho_{\mathbf {SC1}} (\mathbf{SC}) ρSC1(SC) 表更名 操作,即将表 S C \mathbf SC SC 更名为 S C 1 \mathbf SC1 SC1,当一个表需要和其自身进行连接运算 时,通常要使用更名操作。
【特别注意】
虽然在讲解 θ \theta θ-连接操作时,使用笛卡尔积然后再进行选择来得到 θ \theta θ-连接结果,这主要是方便大家理解。但当 引入连接操作后,DBMS 可直接进行连接操作,而不必先形成笛卡尔积。
定义:给定关系 R \mathbf R R 和关系 S \mathbf S S, R \mathbf R R 与 S \mathbf S S 的 等值连接 运算结果也是一个关系,记作 ,它 由关系 R \mathbf R R 和关系 S \mathbf S S 的笛卡尔积中选取 R \mathbf R R 中属性 A A A 与 S \mathbf S S 中属性 B B B 上值相等的元组所构成。
【等值连接(Equi-Join
)操作的示例一】(抽象的)
【等值连接(Equi-Join
)操作的示例二】(语义的)
员工表 Worker(W#, Wname, Wsex, Wage, Honor_type)
,获奖类别表 Honor(Type, Title)
,找出所有获奖员工姓名、年龄及其获奖的名称:
(Honor_type=Type)
条件的元组;(Wname, Wage, Title)
上进行投影运算,得到最终结果。定义:给定关系 R \mathbf R R 和关系 S \mathbf S S, R \mathbf R R 与 S \mathbf S S 的自然连接运算结果也是一个关系,记作 R ⋈ S \mathbf R \Join \mathbf S R⋈S,它由关系 R \mathbf R R 和关系 S \mathbf S S 的笛卡尔积中选取相同属性组 B B B 上值相等的元组所构成。
【自然连接(Natural-Join)操作的示例一】(抽象的)
【自然连接(Natural-Join)操作的示例二】(语义的)
学生选课表 SC(S#, C#, Score)
,课程表 Course (C#, Cname, Chours, Credit, T#)
,
查询所有学生选课的成绩(包括学号,课程名称,成绩):
(C#)
上值相同的元组;(S#, Cname, Score)
上进行投影操作,得到最终结果。提问:如果查询所有学生选课的成绩 (包括学生姓名,课程名称,成绩)
可用连接运算替换
)(需要联合查询 多个表);002
的 学生学号 和 成绩;【思路】首先 根据题目属性定位需要查询的表,课程号 C#
,学生学号 S#
,成绩 Score
, S C \mathbf {SC} SC 表包含全部属性,故查询 S C \mathbf {SC} SC 表即可。
单表查询,不需要做笛卡尔积或连接运算,直接 选择 + 投影 即可。
001
的 学生学号、姓名;【思路】首先 根据题目属性定位需要查询的表,课程号 C#
,学生学号 S#
,姓名 Sname
, S C \mathbf {SC} SC 表包含 S#
和 C#
, S t u d e n t \mathbf {Student} Student 包含 S#
和 Sname
,故查询 S C \mathbf {SC} SC 表和 S t u d e n t \mathbf {Student} Student 表。
双表查询,需要 连接 + 选择 + 投影。这里两个表有共同属性 S#
,采用自然连接。
【注意连接与积的差别】
【思路】首先 根据题目属性定位需要查询的表,课程名称 Cname
,学生学号 S#
,姓名 Sname
,成绩 Score
, S C \mathbf {SC} SC 表包含 S#
和 C#
, S t u d e n t \mathbf {Student} Student 包含 S#
和 Sname
, C o u r s e \mathbf Course Course 表包含 C#
和 Cname
,故查询 S C \mathbf {SC} SC 表和 S t u d e n t \mathbf {Student} Student 表 和 C o u r s e \mathbf {Course} Course 表。
三表查询,需要 连接 + 选择 + 投影。这里 S C \mathbf {SC} SC 表和 S t u d e n t \mathbf {Student} Student 表有共同属性 S#
, S C \mathbf {SC} SC 表和 C o u r s e \mathbf {Course} Course 表有共同属性 C#
,采用自然连接。
001
或 002
的学生的学号;001
和 002
的学生的学号;是否可写成如下形式呢?
不可以,因为这相当于让一个元组中的
C#
有001
值,也有002
值,而一个元组只有一个值,是不对的,所以上述查询结果为空的表。
正确查询语句如下:
请问:上式使用的是等值连接,换成自然连接,写成如下形式是否正确?
注意这也是不对的,因为自然连接是共同属性的值对应相等,而这两个表是相同的, S C 1 \mathbf {SC1} SC1 是由 S C \mathbf {SC} SC 表更名之后得到,内容相同,所以自然连接去除同名属性列后还是三个属性,结果依然是空。
我们也可以采用交运算来实现:
对 S \mathbf S S 也进行投影,再对 S \mathbf S S 和 S C \mathbf {SC} SC 自然连接后得到的表进行 选择 + 投影,得到的表满足并相容性后,再做差。
检索 是否涉及多个表,如不涉及,则可直接采用 并、差、交、选择与投影,只要注意条件书写正确与否即可;
如 涉及多个表,则检查:
能否使用 自然连接,将多个表连接起来(多数情况是这样的);
如不能,能否使用 等值或不等值连接( θ \theta θ-连接);
还不能,则使用 广义笛卡尔积,注意相关条件的书写;
连接完后,可以继续使用 选择、投影 等运算,即所谓数据库的 “选投联” 操作。
除法运算 经常用于求解 “查询… 全部的/所有的…” 问题。
前提条件:给定关系 R ( A 1 , A 2 , … , A n ) \mathbf R(A_1 ,A_2 , … ,A_n) R(A1,A2,…,An) 为 n n n 度关系,关系 S ( B 1 , B 2 , … , B m ) \mathbf S(B_1 ,B_2 , … ,B_m) S(B1,B2,…,Bm) 为 m m m 度关系。如果可以进行关系 R R R 与关系 S S S 的除运算,当且仅当:属性集 { B 1 , B 2 , … , B m } \{ B_1 ,B_2 , … , B_m \} {B1,B2,…,Bm} 是属性集 { A 1 , A 2 , … , A n } \{ A_1 ,A_2 , … ,A_n \} {A1,A2,…,An} 的真子集,即 m < n m < n m<n。
先举个例子帮助理解:
定义:关系 R \mathbf R R 和关系 S \mathbf S S 的除运算结果也是一个关系,记作 R ÷ S \mathbf R ÷ \mathbf S R÷S,分两部分来定义。
设属性集 { C 1 , C 2 , … , C k } = { A 1 , A 2 , … , A n } – { B 1 , B 2 , … , B m } \{C_1,C_2, … ,C_k \} = \{A_1,A_2, … ,A_n \} – \{B_1,B_2, … ,B_m \} {C1,C2,…,Ck}={A1,A2,…,An}–{B1,B2,…,Bm},则有 k = n – m k=n–m k=n–m,则 R ÷ S R÷S R÷S 结果关系是 k k k 度 ( n − m n-m n−m 度)关系,由 { C 1 , C 2 , … , C k } \{C_1,C_2, … ,C_k \} {C1,C2,…,Ck} 属性构成。
再设关系 R ( < a 1 , … , a n > ) \mathbf R (
它与 S \mathbf S S 中每一个元组 < b 1 , … , b m >
【除(Division)操作的示例一】(抽象的)
【除(Division)操作的示例二】(语义的)
查询选修了全部课程的学生的学号:
【除(Division)操作的示例三】(语义的)
查询选修了学号 98030201
学生所学全部课程的同学的姓名(姓名 Sname
在 表 S \mathbf S S 中):
【外连接问题的提出】(示例)
Teacher(T#, Tname, Salary), Course(C#, Cname), Teach(T#, C#)
请列出 所有老师的有关信息,包括 姓名,工资,所教课程 等。
按上式连接的结果,003
号教师的姓名和工资信息丢失了。因为在 T e a c h \mathbf {Teach} Teach 表中没有和 003
号教师相匹配的元组,元组 003
号教师(又称为 失配元组)不能和其他表的元组形成连接元组。
怎样保证使 003
号教师信息仍旧出现在结果关系中呢?----这就需要外连接。
定义:两个关系 R R R 与 S S S 进行连接时,如果关系 R R R (或 S S S)中的元组在 S S S(或 R R R )中 找不到相匹配的元组,则 为了避免该元组信息丢失,从而将该元组与 S S S(或 R R R)中 假定存在的全为空值的元组形成连接,放置在结果关系中,这种连接称之为 外连接(Outer Join)。
外连接 = 自然连接 (或 θ \theta θ-连接) + 失配的元组(与全空元组形成的连接);
外连接的形式:左外连接、右外连接、全外连接
左外连接 = 自然连接(或 θ \theta θ-连接) + 左侧表中失配的元组
右外连接 = 自然连接(或 θ \theta θ-连接) + 右侧表中失配的元组
全外连接 = 自然连接(或 θ \theta θ-连接) + 两侧表中失配的元组
【外连接操作示例】
【外连接(Outer-Join)操作的示例】
前面问题例子的解决方案,查询所有老师的信息:
查询所有老师和所有课程的信息:
正确答案:A
【解析】最终结果有五个属性,所以只可能是连接运算,而 R 1 \mathbf R_1 R1 和 R 2 \mathbf R_2 R2 有公共的属性,所以自然连接即可。
正确答案:A
正确答案:A
【解析】自然连接定义:给定关系 R \mathbf R R 和关系 S \mathbf S S, R \mathbf R R 与 S \mathbf S S 的自然连接运算结果也是一个关系,它由关系 R \mathbf R R 和关系 S \mathbf S S 的笛卡尔积中选取相同属性组 B B B 上值相等的元组所构成。
正确答案:A
【解析】关系 R \mathbf R R 和 W \mathbf W W 做自然连接操作,而有两个公共属性时,需保证两个属性的内容都相等才能连接,而不是其中一个。
正确答案:A
正确答案:A
【解析】此公式的含义为所有学生的姓名和年龄减去学过“002”
课程的学生姓名和年龄,因此答案为没有学习过课程号为002
号课程的学生姓名和年龄。
正确答案:A
【解析】做 θ θ θ-连接时不需要将公共属性合并,而自然连接时需要,所以 T 1 \mathbf {T1} T1 的属性个数大于 T 2 \mathbf {T2} T2 的属性个数。
正确答案:A
正确答案:A
正确答案:A
正确答案:A
正确答案:A
【解析】此公式中 S × S C \mathbf S × \mathbf {SC} S×SC 运算之后,所有人都存在C#=”002”
,所以答案为空。
正确答案:A
正确答案:A
正确答案:A
正确答案:A
正确答案:A
【解析】 1)为元组选择,2)投影一个列,3)属于一个关系不属于另一个关系为差,4)原文提到按照某种条件,所以选连接。
正确答案:A
正确答案:A
【解析】一组域 D 1 , D 2 , … , D n D_1 , D_2 ,…, D_n D1,D2,…,Dn 的笛卡尔积为: D 1 × D 2 × … × D n = ( d 1 , d 2 , … , d n ) ∣ d i ∈ D i , i = 1 , … , n D_1×D_2×…×D_n = { (d_1 , d_2 , … , d_n) \ | \ d_i∈D_i , i = 1,…,n } D1×D2×…×Dn=(d1,d2,…,dn) ∣ di∈Di,i=1,…,n,笛卡尔积的每个元素 ( d 1 , d 2 , … , d n ) (d_1 , d_2 , … , d_n) (d1,d2,…,dn) 称作一个 n n n-元组( n − t u p l e n-tuple n−tuple),所以 R × S × W = 10 × 10 × 10 = 1000 \mathbf R × \mathbf S × \mathbf W=10×10×10=1000 R×S×W=10×10×10=1000。
正确答案:A
【解析】关系 R \mathbf R R 和 S \mathbf S S 的笛卡尔积由关系 R \mathbf R R 中的元组与关系 S \mathbf S S 的元组进行所有可能的拼接构成,笛卡尔积 T \mathbf T T 的元组个数为 R \mathbf R R 的元组个数与 S \mathbf S S 的元组个数的乘积,即 100 × 300 = 30000 100×300=30000 100×300=30000。
正确答案:A
【解析】为 R \mathbf R R 与 S \mathbf S S 的交,由同时出现在 R \mathbf R R 和 S \mathbf S S 中的元组构成,交运算可以通过差运算来实现: R ∩ S = R − ( R − S ) = S − ( S − R ) \mathbf R ∩ \mathbf S = \mathbf R -( \mathbf R- \mathbf S)= \mathbf S-( \mathbf S- \mathbf R) R∩S=R−(R−S)=S−(S−R)。
正确答案:A
【解析】学生姓名和学生性别用到关系 S \mathbf S S,课程名称用到关系 C \mathbf C C,选课情况用到关系 S C \mathbf {SC} SC,正确的关系代数表达式为: Π S n a m e ( σ C n a m e = ” C O M P U T E R ” a n d S s e x = ”女” ( S ⋈ S C ⋈ C ) ) Π_{Sname}(σ_{Cname=”COMPUTER” \ and \ Ssex=”女”} (\mathbf S⋈\mathbf {SC}⋈\mathbf C)) ΠSname(σCname=”COMPUTER” and Ssex=”女”(S⋈SC⋈C))。
正确答案:A
【解析】多个关系的笛卡尔积的运算结果也是一个关系,其属性个数为所有关
系属性个数的和。
正确答案:A
【解析】 σ f 2 ( R ) σ_{f2}( \mathbf R) σf2(R) 表示关系 R \mathbf R R 中满足条件 f 1 f1 f1 的元组, σ f 1 ( σ f 2 ( R ) ) σ_{f1}(σ_{f2}(\mathbf R)) σf1(σf2(R)) 表示满足条件 f 1 f1 f1 的元组中,还满足条件 f 2 f2 f2 的元组,与 σ f 1 ∧ f 2 ( R ) σ_{f1∧f2}(\mathbf R) σf1∧f2(R) 等价。