给定关系A(a,b,c)和关系B(a,d,e),使用投影来隔离'B'中的'a',如此'B_ = projection_ {a}(B) ',有没有办法排除'A'中的所有tupples,它与'B'没有'a'?
请注意,我只使用关系代数,而不是扩展版本。
答案 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
也称为“匹配”。