简短结论:传统(标准)关系代数本身不能直接、完善地处理空值(NULL);实际数据库系统会在关系代数基础上做扩展来处理空值。
下面分几点说明。
在经典关系模型和集合论定义的关系代数中:
因此像:
等操作都建立在“值明确可比、结果确定”的前提上。
NULL 不是普通值,而是表示:
这会导致传统代数规则失效,例如:
NULL = NULL 不是真,而是未知NULL > 5 也是未知所以:
直接用传统关系代数算 NULL,结果会不确定或定义不清。
SQL 和真实 DBMS 对关系代数做了扩展:
例如:
WHERE age > 18
若 age IS NULL,结果为 UNKNOWN,该行不被选中。
传统连接 ⋈ 会丢 NULL 相关行; 实际系统用:
来保留 NULL 侧元组。
实际系统定义:
IS NULL / IS NOT NULL研究者提出过多种扩展:
但这些不是原始 Codd 关系代数的标准部分。
如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。