将sql转换为元组关系演算

时间:2015-11-19 11:09:46

标签: sql tuples tuple-relational-calculus

我正在尝试将sql查询转换为元组关系演算,但是有NOT EXIST导致我被卡住。

SQL查询:

SELECT num FROM a a1, b b1
WHERE a1.num = b1.no AND a1.name = "Tim"
AND NOT EXIST
    (SELECT * FROM a a2, b b2
     WHERE a2.num = b2.no AND a2.name = "Tim" 
     AND b2.rating > b1.rating)

我已经开始:

{ t: num | ∃a1 ∈ a ∃b1 ∈ b [ t(num) = a1(num) ∧ a1.name = "Tim" ∧ ¬∃a2 ∈ a ...
这是我被困的地方。如何从NOT EXISTSa2显示b2?如果我写¬∃a2 ∈ a ¬∃b2 ∈ b,那么这将是一个双重嵌套的SQL查询,而不是上面列出的查询。

1 个答案:

答案 0 :(得分:2)

您希望a2不存在b2WHERE

SQL表达式

NOT EXISTS (SELECT * FROM a a1, b b2 WHERE ...)

对应元组微积分表达式

¬(∃ a2 ∈ a ∃ b2 ∈ b [...]) 

在SQL中,{,1}}子查询中的一行,当且仅当其EXISTS的{​​{1}}和a2值存在时才形成该行。所以b2这样的SQL WHERE加上NOT EXISTS对,而不是存在微积分a2b2 a2的情况}。