-- 查找 description 为空的商品
SELECT name FROM products WHERE description IS NULL;
-- 查找 stock 不为空的商品
SELECT name FROM products WHERE stock IS NOT NULL;
错误写法(永远不成立):
WHERE description = NULL -- 返回 UNKNOWN
4. NULL 在聚合函数中的行为
函数
对 NULL 的处理
COUNT(*)
统计所有行
COUNT(col)
跳过 NULL
SUM() / AVG()
跳过 NULL
MAX() / MIN()
跳过 NULL
-- 统计有库存的商品数量
SELECT COUNT(stock) AS in_stock_count FROM products;
-- 结果: 3(跳过 Keyboard 的 NULL)
5. NULL 排序规则
ASC:NULL 排在最前
DESC:NULL 排在最后
-- 让 NULL 排在最后(即使 DESC)
SELECT name, stock FROM products
ORDER BY stock DESC NULLS LAST;
SQLite 3.30.0+ 支持 NULLS FIRST/LAST
6. 处理 NULL:COALESCE 和 IFNULL
函数
说明
示例
COALESCE(val1, val2, ...)
返回第一个非 NULL 值
COALESCE(description, 'No desc')
IFNULL(val, replacement)
仅两个参数
IFNULL(stock, 0)
-- 显示库存,缺货显示 0
SELECT name, IFNULL(stock, 0) AS display_stock FROM products;
-- 显示描述,无描述显示默认文本
SELECT name, COALESCE(description, 'Not available') AS info FROM products;
CREATE TABLE users (
email TEXT UNIQUE -- 允许多个 NULL
);
INSERT INTO users VALUES (NULL), (NULL); -- 成功!
9. 实战示例
-- 1. 查找缺货或无描述的商品
SELECT name FROM products
WHERE stock = 0 OR description IS NULL;
-- 2. 统计平均价格(排除 NULL)
SELECT ROUND(AVG(price), 2) AS avg_price FROM products;
-- 3. 导出 CSV 时替换 NULL
SELECT
name,
COALESCE(description, ''),
IFNULL(stock, 0) AS stock
FROM products;