数据库中的缺失值、关系及 SQL 语言解析
1. 缺失值(NULLs)
在数据库里,常常会遇到某列值未知的情况。以往,人们习惯用“无效”值来表示电子表格中未知或缺失的值,例如使用古老日期、负数、’UNKNOWN’ 或 ‘N/A’ 等文本字符串。不过,处理这些值需要特殊编码,像 IF (value<>'UNKNOWN') THEN … 这样的语句,若仅使用一次还可行,但每次新增列类型时都要编写特殊代码,就显得很繁琐。
相比之下,使用 NULL 值更为简便。在数学中,NULL 表示空集或无值的集合。根据相关规则,关系数据库管理系统(RDBMS)支持使用 NULL 值(与空字符串、空白字符串或零不同)以系统的方式表示缺失信息,且与数据类型无关。
NULL 具有以下特性:
- 任何值与 NULL 连接结果都为 NULL。因为 NULL 可代表任何有效值,所以未知值与已知值连接后,结果仍是未知值。
- 所有涉及 NULL 的数学运算结果都为 NULL,原因和值与 NULL 连接结果为 NULL 相同。
- 引入 NULL 后,逻辑比较会变得复杂。
当在布尔数学中引入 NULL 时,真值表会更复杂。评估条件时,有三种可能结果:TRUE、FALSE 或 UNKNOWN。只有当搜索条件评估为 TRUE 时,行才会出现在结果中。例如,“if NULL=1”,很多人可能认为答案是 FALSE,但实际上是 UNKNOWN,因为 NULL 代表缺失值,“缺失”意味着值可能存在。
以下是一个有趣的查询示例:
select
超级会员免费看
订阅专栏 解锁全文
3285

被折叠的 条评论
为什么被折叠?



