软考 - 软设之关系代数
简述关系代数的几个关系运算
- 两个表
- 1. 并: R ⋃ S R \bigcup S R⋃S
- 2. 交: R ⋂ S R \bigcap S R⋂S
- 3. 差: R − S R - S R−S
- 4. 笛卡儿积: R × S R \times S R×S
- 5. 投影: π S N o , S N a m e ( R ) \pi_{SNo,SName}(R) πSNo,SName(R)
- 6. 选择: σ S N o = N o 0002 ( R ) \sigma_{SNo=No0002}(R) σSNo=No0002(R)
- 7. 自然连接: R ⋈ S R ⋈ S R⋈S
- 例题
两个表
关系R | 关系S | |||||
SNo | SName | SDept | SNo | SName | SDept | |
No0001 | Mary | 1S | No0001 | Mary | 1S | |
No0002 | Candy | 1S | No0008 | Katter | 1S | |
No0003 | Jam | 1S | No0021 | Tom | 1S |
1. 并: R ⋃ S R \bigcup S R⋃S
将相同的合并,取所有
-- 结果集,不允许重复值 select * from R UNION select * from S > -- 结果集允许重复值 select * from R UNION ALL select * from S
R ⋃ S = { t ∣ t ∈ R ⋁ t ∈ S } R \bigcup S = \{ t | t \in R \bigvee t \in S \} R⋃S={t∣t∈R⋁t∈S}
SNo | SName | SDept |
No0001 | Mary | 1S |
No0002 | Candy | 1S |
No0003 | Jam | 1S |
No0008 | Katter | 1S |
No0021 | Tom | 1S |
2. 交: R ⋂ S R \bigcap S R⋂S
只取相同的值
select SNo, SName, SDept FROM R,S WHERE R.SNo=S.SNo select * from r,s where r.t=s.t
R ⋂ S = { t ∣ t ∈ R ⋀ t ∈ S } R \bigcap S = \{ t | t \in R \bigwedge t \in S \} R⋂S={t∣t∈R⋀t∈S}
SNo | SName | SDept |
No0001 | Mary | 1S |
3. 差: R − S R - S R−S
取不相同的,且注意是谁在前,则显示谁的表,本例是R在前,所以以R为主显示,S不显示
R − S = { t ∣ t ∈ R ⋁ t ∉ S } R - S = \{ t | t \in R \bigvee t \notin S \} R−S={t∣t∈R⋁t∈/S}
SNo | SName | SDept |
No0002 | Candy | 1S |
No0003 | Jam | 1S |
4. 笛卡儿积: R × S R \times S R×S
乘法结合,两个表各3条记录,相乘则是3×3=9条记录。第一个表的每一条记录与第二个表的所有记录组合
R × S = { t ∣ t = < t n , t m > ⋀ t n ∈ R ⋀ t m ∈ S } R \times S = \{ t | t = <t^n, t^m> \bigwedge t^n \in R \bigwedge t^m \in S \} R×S={t∣t=<tn,tm>⋀tn∈R⋀tm∈S}
< t n , t m > <t^n, t^m> <tn,tm>意思为 t n t^n tn和 t m t^m tm拼接成一个元组
SNo | SName | SDept | SNo | SName | SDept |
No0001 | Mary | 1S | No0001 | Mary | 1S |
No0001 | Mary | 1S | No0008 | Katter | 1S |
No0001 | Mary | 1S | No0021 | Tom | 1S |
No0002 | Candy | 1S | No0001 | Mary | 1S |
No0002 | Candy | 1S | No0008 | Katter | 1S |
No0002 | Candy | 1S | No0021 | Tom | 1S |
No0003 | Jam | 1S | No0001 | Mary | 1S |
No0003 | Jam | 1S | No0008 | Katter | 1S |
No0003 | Jam | 1S | No0021 | Tom | 1S |
5. 投影: π S N o , S N a m e ( R ) \pi_{SNo,SName}(R) πSNo,SName(R)
等价 π 1 , 2 ( R ) \pi_{1,2}(R) π1,2(R),即投影第1、2个字段(书中叫 元组 t???一行记录??? )的数据
SNo | SName |
No0001 | Mary |
No0002 | Candy |
No0003 | Jam |
6. 选择: σ S N o = N o 0002 ( R ) \sigma_{SNo=No0002}(R) σSNo=No0002(R)
等价 σ 1 = N o 0002 ( R ) \sigma_{1=No0002}(R) σ1=No0002(R),按行选择R表中的指定字段的数据
注: σ \sigma σ读西格马,希腊文大写为 Σ \Sigma Σ
SNo | SName |
No0002 | Candy |
7. 自然连接: R ⋈ S R ⋈ S R⋈S
将两表中各字段连接,且只显示相同字段,去掉重复的字段和不相等的记录
关系R | 关系S | |||||
SNo | SName | SDept | SNo | SAge | ||
No0001 | Mary | 1S | No0001 | 23 | ||
No0002 | Candy | 1S | No0008 | 24 | ||
No0003 | Jam | 1S | No0021 | 25 |
7.1. 默认为等值连接 π R . m , S . n . . . ( σ R . m x = S . n y ( R × S ) ) \pi_{R.m,S.n...}(\sigma_{R.m_x=S.n_y}(R \times S)) πR.m,S.n...(σR.mx=S.ny(R×S))
select R.SNo, R.SName, R.SDept, S.SAge from R,S where R.SNo=S.SNo
R.m代表R的所有字段,S.n代表S的所有字段。
m x m_x mx或 n y n_y ny是指某个字段。
自然连接是不提出明确的连接条件,但 暗含 着一个条件,就是 列名相同的值也相同。在自然连接的结果表中,往往还要合并相同列名的列。当对关系R和S进行自然连接时,要求R和S含有一个或者多个共有的属性。本例中为 R . S N o = S . S N o R.SNo=S.SNo R.SNo=S.SNo(等值连接 R ⋈ S R . S N o = S . S N o \frac{R ⋈ S}{R.SNo=S.SNo} R.SNo=S.SNoR⋈S):只取SNo字段中相同的内容且相同的列只取一列且不相同的SNo不显示,结果如下:
SNo | SName | SDept | SAge |
No0001 | Mary | 1S | 23 |
多列例子: R ⋈ S R . S N o = S . S N o ⋀ R . S N a m e = S . S N a m e \frac{R ⋈ S}{R.SNo=S.SNo \bigwedge R.SName=S.SName} R.SNo=S.SNo⋀R.SName=S.SNameR⋈S
-- 多列的情况下:以下为示例,没有展示出实际的表,假设S中也有SName字段情况下
select R.SNo, R.SName, R.SDept, S.SAge
from R,S
where R.SNo=S.SNo
and R.SName=S.SName
注:逻辑符号 π R . m , S . n . . . ( σ R . m x = S . n y ⋀ R . m j = S . n g ( R × S ) ) \pi_{R.m,S.n...}(\sigma_{R.m_x=S.n_y\bigwedge R.m_j=S.n_g}(R \times S)) πR.m,S.n...(σR.mx=S.ny⋀R.mj=S.ng(R×S))
符号 | 名称 |
---|---|
¬ \neg ¬ | 非 |
⋀ \bigwedge ⋀ | 与 |
⋁ \bigvee ⋁ | 或 |
说明:在广义笛卡尔积R×S中 选出同名属性 上符合相等条件元组(即 公共值相等就连接 ,不相等就删除 ),再进行投影,去掉重复的同名属性(列),组成新的关系。
自然连接是一种特殊的等值链接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中把重复的属性列去掉。
——
等价: R ⋈ S R . S N o = S . S N o \frac{R ⋈ S}{R.SNo=S.SNo} R.SNo=S.SNoR⋈S = Π R . S N o , . . . , S . S N o , . . . ( σ R . S N o = S . S N o ( R × S ) ) \Pi_{R.SNo,...,S.SNo,...}(\sigma_{R.SNo=S.SNo}(R \times S)) ΠR.SNo,...,S.SNo,...(σR.SNo=S.SNo(R×S))
——
以下示例过程:取R.SNo,R.SName,R.SDept,S.SAge字段,且R.SNo=S.SNo,即 R ⋈ S 1 = 4 \frac{R ⋈ S}{1=4} 1=4R⋈S= Π 1 , 2 , 3 , 5 ( σ 1 = 4 ( R × S ) ) \Pi_{1,2,3,5}(\sigma_{1=4}(R \times S)) Π1,2,3,5(σ1=4(R×S)),数字为字段顺序
注:第5版软设大纲书中有将 π \pi π为大写,根据上下文,个人理解既然是投影,大小写一样。
7.1.1. 第一步:笛卡儿积 R × S R \times S R×S
1 | 2 | 3 | 4 | 5 |
SNo | SName | SDept | SNo | SAge |
No0001 | Mary | 1S | No0001 | 23 |
No0001 | Mary | 1S | No0008 | 24 |
No0001 | Mary | 1S | No0021 | 25 |
No0002 | Candy | 1S | No0001 | 23 |
No0002 | Candy | 1S | No0008 | 24 |
No0002 | Candy | 1S | No0021 | 25 |
No0003 | Jam | 1S | No0001 | 23 |
No0003 | Jam | 1S | No0008 | 24 |
No0003 | Jam | 1S | No0021 | 25 |
7.1.2. 第二步:选择 σ S N o = S N o ( T ) \sigma_{SNo=SNo}(T) σSNo=SNo(T)
T 为笛卡儿积后的新表,等价 σ 1 = 4 ( S ) \sigma_{1=4}(S) σ1=4(S)。进行选择的值是通过笛卡儿积中筛选出SNo进行对比(公共值SNo),只有 R.SNo(No0001)=S.SNo(No0001) 相等,其余的不相同则删除,得到
SNo | SName | SDept | SNo | SAge |
No0001 | Mary | 1S | No0001 | 23 |
7.1.3. 第三步:投影 π 1 , 2 , 3 , 5 ( T ) \pi_{1,2,3,5}(T) π1,2,3,5(T)删除重复的列
SNo | SName | SDept | SAge |
No0001 | Mary | 1S | 23 |
例题
- 若对关系R(A,B,C,D)和S(C,D,E)进行关系代数运算,则表达式 π 3 , 4 , 7 ( σ 4 < 5 ( R × S ) ) \pi_{3,4,7}(\sigma_{4<5}(R\times S)) π3,4,7(σ4<5(R×S))=______,该表达式与______等价。
关系R | 关系S | |||||
A | B | C | A | B | C | |
3 | 0 | 3 | 3 | 10 | 11 | |
2 | 5 | 6 | 4 | 11 | 6 | |
5 | 8 | 9 | 5 | 10 | 13 | |
8 | 11 | 12 | 6 | 11 | 14 |
- A.
A | B | C |
3 | 0 | 3 |
4 | 8 | 9 |
- B.
A | B | C |
8 | 11 | 6 |
8 | 11 | 14 |
- C.
A | B | C |
5 | 10 | 11 |
5 | 11 | 13 |
- D.
A | B | C |
2 | 11 | 6 |
2 | 11 | 14 |
- A. π C , D , E ( σ D < C ( R × S ) ) \pi_{C,D,E}(\sigma_{D<C}(R\times S)) πC,D,E(σD<C(R×S))
- B. π R . C , R . D , S . E ( σ R . D < S . C ( R × S ) ) \pi_{R.C,R.D,S.E}(\sigma_{R.D<S.C}(R\times S)) πR.C,R.D,S.E(σR.D<S.C(R×S))
- C. π C , D , E ( σ R . D < S . C ( R × S ) ) \pi_{C,D,E}(\sigma_{R.D<S.C}(R\times S)) πC,D,E(σR.D<S.C(R×S))
- D. π R . C , R . D , S . E ( σ D < C ( R × S ) ) \pi_{R.C,R.D,S.E}(\sigma_{D<C}(R\times S)) πR.C,R.D,S.E(σD<C(R×S))
答案1
-
B, B ↩︎