目录
- NULL 值的概念
- 查询中的 NULL 值
- 使用
IS NULL
和IS NOT NULL
- NULL 值与聚合函数
- 使用
COALESCE()
处理 NULL 值 - 使用
IFNULL()
处理 NULL 值 - NULL 值与排序
- 插入 NULL 值
- NULL 值与比较运算符
- 参考资料
NULL 值的概念
在 MySQL 中,NULL
表示一个空值或未知值,它不同于零(0)或空字符串(””)。NULL
通常用于表示缺失、未知或不适用的值。处理 NULL
值时,需要特别注意,因为 NULL
与任何其他值(包括 NULL
本身)进行比较时,总是返回 FALSE
。
查询中的 NULL 值
在查询中,NULL
值表示该列没有值。可以使用 IS NULL
或 IS NOT NULL
来检查列中的 NULL
值。
示例:查询 age
为 NULL
的记录
SELECT * FROM users WHERE age IS NULL;
此查询返回 age
为 NULL
的所有记录。
示例:查询 age
不为 NULL
的记录
SELECT * FROM users WHERE age IS NOT NULL;
此查询返回 age
不为 NULL
的所有记录。
使用 IS NULL
和 IS NOT NULL
在 MySQL 中,不能使用标准的比较运算符(如 =
或 !=
)来判断 NULL
值。相反,使用 IS NULL
和 IS NOT NULL
来检查是否为 NULL
。
示例:检查某列是否为 NULL
SELECT * FROM orders WHERE shipping_date IS NULL;
此查询返回所有 shipping_date
为 NULL
的记录。
示例:检查某列是否不为 NULL
SELECT * FROM orders WHERE shipping_date IS NOT NULL;
此查询返回所有 shipping_date
不为 NULL
的记录。
NULL 值与聚合函数
聚合函数在处理 NULL
值时有特定的规则:
COUNT()
函数不会计算NULL
值。SUM()
,AVG()
,MIN()
,MAX()
等函数会忽略NULL
值。GROUP_CONCAT()
等字符串聚合函数会跳过NULL
值。
示例:计算 sales
列的总和(忽略 NULL
值)
SELECT SUM(sales) FROM orders;
此查询返回 sales
列的总和,自动忽略 NULL
值。
使用 COALESCE()
处理 NULL 值
COALESCE()
函数返回它的第一个非 NULL
值。如果所有的值都是 NULL
,则返回 NULL
。
示例:如果 discount
为 NULL
,则返回 0
SELECT product_name, COALESCE(discount, 0) AS discount FROM products;
此查询返回 discount
列的值,如果 discount
为 NULL
,则返回 0。
使用 IFNULL()
处理 NULL 值
IFNULL()
函数用于检查表达式是否为 NULL
,如果是 NULL
,则返回指定的替代值。如果不是 NULL
,则返回原值。
示例:如果 age
为 NULL
,则显示 0
SELECT name, IFNULL(age, 0) AS age FROM users;
此查询返回 age
列的值,如果 age
为 NULL
,则返回 0。
NULL 值与排序
在 ORDER BY
排序时,NULL
值的排序方式取决于排序方向:
- 默认情况下,升序排列时,
NULL
值排在最前面;降序排列时,NULL
值排在最后。 - 可以使用
IS NULL
或IS NOT NULL
来手动控制NULL
值的排序顺序。
示例:按 age
排序,将 NULL
值放在最后
SELECT name, age
FROM users
ORDER BY age ASC NULLS LAST;
这个查询会将 NULL
值排在所有数字之后(如果数据库支持 NULLS LAST
)。
插入 NULL 值
在插入数据时,可以显式地将 NULL
值插入数据库。例如,在插入数据时,某些列可能没有值,这时可以使用 NULL
。
示例:插入包含 NULL
的数据
INSERT INTO users (name, age) VALUES ('John Doe', NULL);
这条插入语句将 John Doe
的 age
列设置为 NULL
。
注意:如果列定义为 NOT NULL
,则不能插入 NULL
值。
NULL 值与比较运算符
NULL
值与其他值进行比较时总是返回 FALSE
。因此,不能使用常规的比较运算符(如 =
或 !=
)来判断 NULL
。
示例:错误的比较方式
SELECT * FROM users WHERE age = NULL; -- 错误
上面的查询会返回空结果,因为 NULL
与任何值比较时会返回 FALSE
。
正确的方式是使用 IS NULL
:
SELECT * FROM users WHERE age IS NULL; -- 正确
参考资料
如果你有更多关于 NULL
值处理的疑问,或需要具体的优化建议,随时告诉我!
发表回复