我知道关系演算基于一阶逻辑,因此没有空值的概念,但是可以使用反连接在关系代数的查询中表达非空约束。是否存在仅使用关系演算来表达此类查询的等效机制?
例如,可以使用关系演算来表达形式为 SELECT * from x WHERE y IS NOT NULL 的基本 SQL 查询吗?
我知道关系演算基于一阶逻辑,因此没有空值的概念,但是可以使用反连接在关系代数的查询中表达非空约束。是否存在仅使用关系演算来表达此类查询的等效机制?
例如,可以使用关系演算来表达形式为 SELECT * from x WHERE y IS NOT NULL 的基本 SQL 查询吗?
EFCodd 提议在关系模型中引入空值,但他似乎从未处理过后果。在他的《数据库管理的关系模型》一书中,他提出使用两种不同的空值和四值逻辑。他建议这样的系统需要一个重言式检测算法来确保为某些查询返回正确的结果(或至少是有用的、可理解的结果)。在我看来,这样的计划一定是不切实际的,注定要失败,尽管我没有证据。对我来说,用户似乎不太可能正确理解重言式检测。
在 Codd 的方案下,即使存在空值,像 x=x 这样的短路操作也可能评估为真。SQL 的作者当然没有遵循 Codd 的方案,困难就在这里。无论在理论上还是在工作软件中,都没有一套一致的规则来处理空值,因此除非您解释这样的系统及其规则,否则您的问题是无法回答的。