未知不是数值零
设练习表有三个score:8、NULL、0。NULL表示此处没有已知的值,它不是0,也不等于空字符串。在SQL中score = NULL不会按普通相等判断筛出缺失行。
应使用score IS NULL。相反,score IS NOT NULL会保留8和0。先明确缺失的业务含义,再考虑是否可以填补,不能为了让查询通过就统一改成0。
WHERE只保留真值
条件score > 5对8为真,对0为假,对NULL为未知。WHERE只保留条件为真的行,所以NULL行也被排除。这一点对NOT(score > 5)同样重要:未知取反仍是未知。
若需要所有不超过5的分数以及缺失行,应明确写score <= 5 OR score IS NULL。它和NOT(score > 5)的结果不同,差别就在NULL行。
NOT IN 的隐藏风险
再建一个候选集合(1,NULL)。表达式2 NOT IN (1,NULL)不是简单的真,因为与NULL的比较带来未知。数据库专业课中,可用小表同时检查匹配、未匹配和缺失三种情况。
自查时写出每行的真/假/未知,不只对照总行数。若业务问题是“没有对应记录”,研究NOT EXISTS及关联条件通常更清楚;它仍需精确定义要匹配的键与缺失政策。
参考资料
下一步
如需大学专业课程或 Tutorial 学习支持,请在咨询中填写模块名称、学习目标和已尝试的步骤。具体教学安排须确认,计分作业由学生独立完成。
