关系代数中的“in”如何表示?

问题描述 投票:0回答:1

假设我在 SQL 中有以下查询:

SELECT DISTINCT A, B FROM R WHERE C IN (SELECT C FROM S WHERE D=1);

我想把它转换成关系代数。 ‘IN’应该如何转化?

这是我的解决方案(我认为这是不正确的):

πA,B(σR.C = S.C(R⨯(πC(σD=1(S)))))

最后,我们如何表达“NOT IN”?应该是这样的吗?

πA,B(σR.C ≠ S.C(R⨯(πC(σD=1(S)))))
mysql relational-algebra
1个回答
0
投票

IN(subquery)
实际上是表达 semijoin 的另一种方式。半连接仅返回第一个关系的列,如果第二个关系中有多个匹配项,则不会将结果的行相乘,就像典型的连接那样。

半连接的符号是⋉。默认情况下,此连接是自然连接,因此您不必指定要连接的列。

这是我在关系代数方面的尝试:

πA,B(σD=1R⋉S)

© www.soinside.com 2019 - 2024. All rights reserved.