将 sql 转换为元组关系演算
Convert sql to 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 ...
这就是我卡住的地方。如何从 a2
和 b2
中证明它是 NOT EXISTS
?如果我写 ¬∃a2 ∈ a ¬∃b2 ∈ b
那么这将是一个双重嵌套的 sql 查询而不是上面列出的查询。
根据 WHERE
.
,您希望那里不存在 a2
和 b2
SQL表达式
NOT EXISTS (SELECT * FROM a a2, b b2 WHERE ...)
对应元组演算表达式
¬(∃ a2 ∈ a ∃ b2 ∈ b [...])
在 SQL 中,子查询中有 EXISTS
行当且仅当存在 a2
和 b2
行值时其 WHERE
形成那一行。所以 NOT EXISTS
这样的 SQL a2
加上 b2
对,但不是微积分 a2
和 b2
其中 ...
.
我正在尝试将 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 ...
这就是我卡住的地方。如何从 a2
和 b2
中证明它是 NOT EXISTS
?如果我写 ¬∃a2 ∈ a ¬∃b2 ∈ b
那么这将是一个双重嵌套的 sql 查询而不是上面列出的查询。
根据 WHERE
.
a2
和 b2
SQL表达式
NOT EXISTS (SELECT * FROM a a2, b b2 WHERE ...)
对应元组演算表达式
¬(∃ a2 ∈ a ∃ b2 ∈ b [...])
在 SQL 中,子查询中有 EXISTS
行当且仅当存在 a2
和 b2
行值时其 WHERE
形成那一行。所以 NOT EXISTS
这样的 SQL a2
加上 b2
对,但不是微积分 a2
和 b2
其中 ...
.