跳到主要内容

空值与三值逻辑

NULL 表示哪几种含义?​

  • 未知值: 确实存在但当前不知道的值;
  • 不适用的值: 该属性对这一行本来就没有意义;
  • 保留值: 有意留空、暂不填写的值;

NULL 参与运算会得到什么结果?​

  • 算术运算: 任何含 NULL 的算术表达式结果仍为 NULL;
  • 比较运算: 任何与 NULL 的比较结果都不是 TRUE 或 FALSE, 而是 UNKNOWN;
  • 原因: NULL 不代表某个具体值, 无法与它比大小或判等;

三值逻辑是什么?​

取值含义
TRUE条件成立
FALSE条件不成立
UNKNOWN目前无法判断真假的中间态
  • 来源: NULL 参与比较时产生;
  • 过滤行为: WHERE 只保留条件为 TRUE 的元组, 条件为 FALSE 或 UNKNOWN 的元组都会被过滤;
  • 易错点: x <> 5 对 x IS NULL 的行不成立, 需要显式写 IS NULL;

聚集与分组遇到 NULL 怎么处理?​

(source: 050-sql.md §简单查询/§空值/§布尔值)