CodeGym /课程 /SQL SELF /认识 NULL。NULL 和 0 的区别

认识 NULL。NULL 和 0 的区别

SQL SELF
第 9 级 , 课程 0
可用

现在是时候详细聊聊 NULL 了。这可不是无聊的闲聊,虽然我们的主角看起来……啥都没有。如果把表比作房子,NULL 就像里面的幽灵——安静、神秘、让人摸不着头脑。它好像在,但你问它啥它都不说,计算时也不参与,比较时还总是躲着。这不仅仅是“空”——而是 “啥都不知道”

在 SQL 世界里,NULL 不是 0,不是空字符串,也不是我们平时说的“没有数据”。它是个特殊的未知标记,用的时候得小心点。今天我们就来搞清楚为啥 NULL 不是个奇怪的客人,而是数据库里很重要的角色。它其实就是 “值未知或者没定义”

NULL 和空字符串或者数字 0 有啥区别?

很多刚学 SQL 的小伙伴会把 NULL 和别的值搞混,比如空字符串 '' 或者数字 0。咱们来看看它们的关键区别:

概念 含义
NULL 完全没有值。这不是空盒子,是连盒子都没有
空字符串 就是没有任何字符的字符串。比如:''
数字 0 表示具体的数字,等于零

举个生活中的例子:假如你有个员工表,存着他们的工资。如果工资是 0,那就是这人一分钱没拿。如果工资是 NULL,那你根本不知道他拿多少(或者还没定下来)。

怎么理解 NULL

现在我们大概知道 NULL 是啥了,来看看 SQL 里怎么和它打交道。最重要的一句话就是:NULL 既不等于任何东西,也不不等于任何东西,甚至不等于自己

SELECT NULL = NULL;  -- 结果:FALSE

是不是有点懵?为啥这样?因为 NULL 就是未知。如果你有两个未知的值,你没法说它们相等,也没法说它们不相等。

咱们再看几个例子:

NULL 操作的例子

SELECT NULL + 1;      -- 结果:NULL
SELECT NULL * 100;    -- 结果:NULL
SELECT NULL = 0;      -- 结果:FALSE
SELECT NULL <> 0;     -- 结果:FALSE

NULL 参与加法、乘法或者别的计算时,结果永远是 NULL。这里 NULL 跟数学里的 0 完全不一样。就像你往虚空里扔点啥,这虚空啥都能吞掉。

实用例子

假设有个 students 表,存着学生的信息:

id name birth_date grade
1 Alice 2000-01-01 85
2 Bob NULL 90
3 Charlie 1999-05-22 NULL
4 Diana NULL NULL

例子 1:NULL 在条件里的影响

如果你想找所有没有出生日期的学生,写 WHERE birth_date = NULL

SELECT *
FROM students 
WHERE birth_date = NULL;

你啥都查不到,因为 NULL = NULL 返回 FALSE。要判断是不是 NULL,得用 IS NULL

SELECT * FROM students WHERE birth_date IS NULL;

结果:

id name birth_date grade
2 Bob NULL 90
4 Diana NULL NULL

例子 2:NULL 在计算里的影响

id name birth_date grade
1 Alice 2000-01-01 85
2 Bob NULL 90
3 Charlie 1999-05-22 NULL
4 Diana NULL NULL

如果你想算所有学生的平均分:

SELECT AVG(grade) FROM students;

结果是:87.5。为啥?因为 NULL 在聚合函数里(比如 AVGSUMMINMAX)会被忽略。但要注意!如果你想把 NULL 的行也算进去,那就得多做点操作了。

后面几节课我们会更详细地学怎么和 NULL 打交道。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION