答案 0 :(得分:1)
在关系代数中,你的集合差异会产生错误,因为这两个集合不是联合兼容的:
对于set union和set difference,所涉及的两个关系必须是union兼容的 - 也就是说,这两个关系必须具有相同的属性集。 from wikipedia
在SQL中,设置差异可行,因为联合兼容性以更宽松的方式理解,即元组度和数据类型必须匹配,但不能匹配名称。所以这是有效的SQL:
SELECT X FROM A
EXCEPT
SELECT Z FROM A
结果将是一个名为X
但是,即使在SQL中,也无法从集合差异中投射Y
,因此无法在SQL或关系代数中使用π Y 。这将是无效的SQL:
SELECT Y -- Y is not defined here, only X
FROM (
SELECT X FROM A
EXCEPT
SELECT Z FROM A
)