Z
ZHANK
编程在线教程SQL 教程去重与 NULL 处理
基础查询

去重与 NULL 处理

使用 DISTINCT 去重、IS NULL/IS NOT NULL、COALESCE

去重与 NULL 处理

重复数据和 NULL 是数据清洗的两大难题。DISTINCT 去重,IS NULL 判空。

学完本章你将: 掌握 DISTINCT、IS NULL、COALESCE。


DISTINCT —— 去重

sql
-- 查询有用户来自哪些城市(去重)
SELECT DISTINCT city FROM users;

-- 多列去重:组合唯一
SELECT DISTINCT city, age FROM users;
-- 只有当 city 和 age 都相同才算重复

-- 配合计数
SELECT COUNT(DISTINCT city) AS 城市数量 FROM users;

NULL 是什么

NULL 不是 0,不是空字符串,而是**"不知道/不存在"**。和 NULL 进行任何运算结果都是 NULL。

sql
-- NULL 不能直接比较!
SELECT * FROM users WHERE city = NULL;   -- ❌ 永远查不到!
SELECT * FROM users WHERE city IS NULL;  -- ✅ 正确

-- 非空
SELECT * FROM users WHERE city IS NOT NULL;

COALESCE —— 给 NULL 默认值

sql
-- 如果 city 是 NULL,显示"未知"
SELECT name, COALESCE(city, '未知') AS 城市 FROM users;

-- 多参数:取第一个不为 NULL 的值
SELECT COALESCE(NULL, NULL, '第三个值', '第四个') AS result;
-- 结果:'第三个值'

NULLIF —— 条件转 NULL

sql
-- 如果值是 0,返回 NULL;否则返回原值
SELECT name, NULLIF(age, 0) AS age FROM users;

-- 常用于避免除零错误
-- SELECT amount / NULLIF(count, 0) FROM stats;