SQL 道场
返回资料库

SQL 基础 / 6 min

NULL:它不是 0,也不是空字符串

NULL 表示未知或缺失,判断和统计时都要单独处理。

NULLIS NULLcount

NULL 表示缺失

NULL 不是 0,也不是空字符串,而是“没有值”或“未知”。

判断 NULL 不能用 =:

-- 错
WHERE city = NULL

-- 对
WHERE city IS NULL

count(*) 和 count(列)

SELECT count(*) AS rows_count,
       count(city) AS city_count
FROM customers;

count(*) 数行数,count(city) 只数 city 不是 NULL 的行。练习场的 customers 表里每位客户都填了城市,所以这里两个数相同;一旦某列有缺失,两者就会分开。

LEFT JOIN 后特别容易遇到 NULL

当你保留左表对象,但右表没有匹配记录时,右表列会变成 NULL。

SELECT c.name, count(o.id) AS order_count
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.name;

这里用 count(o.id) 才能正确得到 0 单客户。

自查

  • 判断缺失值:IS NULL / IS NOT NULL
  • 统计行数:count(*)
  • 统计某列有值的数量:count(column)