#19 SQL 简单

SQL 中 NULL 有哪些容易踩的坑?

NULL三值逻辑

🎯 考察意图

细节题,却能区分「写过生产 SQL」的人。

📐 回答框架

  1. 三值逻辑:TRUE/FALSE/UNKNOWN。
  2. 比较与 NOT IN 陷阱。
  3. 聚合对 NULL 的默认行为。
  4. 用 COALESCE/IS NULL 显式处理。

💬 参考答案(口述版)

NULL 表示「未知」,不是 0 也不是空字符串。

关键坑:
1. = NULL 永远不是 TRUE,应写 IS NULL
2. NOT IN (1,2,NULL) 结果恒为未知,过滤会「吞掉」行
3. 聚合:SUM/AVG 忽略 NULL;COUNT(col) 不计 NULL,COUNT(*) 计行
4. 拼接与运算传播 NULL:需要 COALESCE/IFNULL
5. JOIN 条件里 NULL 匹配不到

实践:入库尽量明确默认值或保留 NULL 但在消费层显式处理;对外部输入做空值率 DQ。

🔍 关键词

IS NULLNOT INCOUNTCOALESCE

💭 面试官可能的追问

追问 1:COUNT(*) 和 COUNT(col) 区别?

COUNT(*) 计所有行;COUNT(col) 只计该列非 NULL 行。常用二者差值估空值数。

⚠️ 常见踩坑

  • 用 NOT IN 子查询且子查询含 NULL
  • 把 NULL 当 0 参与平均,导致口径错

🧠 记忆锚点

NULL 是未知;比较用 IS NULL,小心 NOT IN 与聚合默认行为。