MySQL中NULL值与空值的坑

1. 表达含义

在mysql中

空值:表示一个空字符或零长度的字符串,可以使用空引号 '' 来表示,是已被定义的值;

NULL值:NULL表示缺少一个已知或适当的值,是未被定义的值;。

2. 比较运算

空值:"="或者"<"、">" 、 "<>" 等

NULL值:IS NULL 、IS NOT NULL 

假设t表中所有的数据是一个集合C,那么,集合C = 已被定义值的数据 + 未被定义值的数据
已被定义值的数据 = 值长度>0的数据 + 空值数据
未被定义值的数据 = NULL值数据

使用"="或者"<"、">" 、 "<>" 等比较运算符时只能对‘已被定义的数据’进行筛选,
也就是结果集中都不包含NULL值数据

使用IS NULL 、IS NOT NULL 时所有数据进行筛选,IS NULL的结果集是 NULL值数据,
IS NOT NULL的结果集是 已被定义的数据,即除了NULL值之外的数据

3. COUNT函数

select COUNT(1) from t_a ; -- 输出所有行数
select COUNT(*) from t_a ; -- 输出所有行数

select COUNT(name) from t_a ; -- 输出所有name 列值不为NULL的行数,包含空值

4. ORDER BY

在使用 ORDER BY 进行排序时
升序排序:NULL 值在空值之前,空值在其他值之前,即 NULL 值、空值、其他值;
降序排序则反之。

5. NULL 值与任何其他值进行比较

NULL 值与任何其他值进行比较时都不会为真,或者说NULL 值不能任何其他值进行比较,
即使是 NULL 与 NULL 进行比较也是如此。


select 1 <> 1; -- 0
select 1 <> ''; -- 1

select 1 = NULL; -- NULL
select 1 <> NULL; -- NULL

select NULL = NULL; -- NULL
select NULL <> NULL; -- NULL

6. N/A 与 NULL

N/A就是Empty Set,是指当查询结果为空时,MySQL返回的结果集。
NULL是指某个字段没有被定义值,两者没有直接关系。

你可能感兴趣的:(sql,mysql,数据库)