如何在关系代数中表示“不存在”?

时间:2010-09-17 18:47:17

标签: relational algebra

如何在关系代数中表示SQL“not exists”子句?

3 个答案:

答案 0 :(得分:0)

我认为你正在寻找existential quantifier(∃),然后你可以否定(〜∃)。

对评论的回应:我不记得我的大多数关系代数,但是如果我要对它进行一次尝试,我会猜测:σ something σ(Y)(S)。或者可能是π∃π(Y)(S);我不太记得你是否想要选择或投影。

答案 1 :(得分:-1)

在我的情况下,我通过重写查询解决了这个问题,

SELECT *
FROM contactperson
WHERE EXISTS(
   SELECT *
   FROM person
   WHERE contactperson.personId = person.id)

为:

SELECT *
FROM contactperson
WHERE personId = (
   SELECT id
   FROM person
   WHERE contactperson.personId = person.id)

它返回相同的结果,并且更容易使用连接重写为关系代数。

答案 2 :(得分:-1)

SQL NOT EXISTS的构造可以通过反联接在关系代数中表示。

两个关系L ▹ RL的反联接R选择L的那些不与R中的任何元组联接的元组。可以根据集差异和左半连接定义如下:

L ▹ R = L - (L ⋉ R).