从基于其他关系的关系中选择

时间:2018-06-08 11:29:49

标签: relational-database relational-algebra

给定关系A(a,b,c)和关系B(a,d,e),使用投影来隔离'B'中的'a',如此'B_ = projection_ {a}(B) ',有没有办法排除'A'中的所有tupples,它与'B'没有'a'?

请注意,我只使用关系代数,而不是扩展版本。

1 个答案:

答案 0 :(得分:1)

  

有没有办法排除'A'中的所有tupples,它们与'B'没有'a'?

这是一个双重否定:“排除......不......”。让我们把它变成一个积极的:

“在A中显示a共有B的所有元组。”

也就是说,您需要元组的子集。这里重要的是a是两个关系中唯一的共同属性名称。然后这是Natural Join的开始。

A ⋈ B

这将生成包含所有属性{a, b, c, d, e}的结果。还不是你想要的,所以你在投影的正确轨道上。我将使用Codd的原始运算符(π)。有两种方式;这些是等价的:

A ⋈ (π{a}( B ))            // take just {a} from B
π{a, b, c}( A ⋈ B )        // take {a, b, c} from the result of Join

这是一项普遍需要的操作,因此在“扩展”运算符集中也有一个简写,以避免这种投影,称为(left) SemiJoin

A ⋉ B

也称为“匹配”。