CodeGym /课程 /SQL SELF /检查NULL值:IS NULL和IS NOT NULL

检查NULL值:IS NULL和IS NOT NULL

SQL SELF
第 9 级, 课程 1
可用

今天我们继续聊聊NULL——数据库里那个“隐形英雄”。如果你还觉得NULL就是“啥都没有”,你说得没错,但其实还不止这样。这节课我们要学会怎么检查数据里有没有NULL,还有遇到这种情况该咋办。 准备好一起追踪缺失的值了吗?

先来个简单的例子——假设你在搞一个网店的数据库。有个订单表,有些订单没写评论,有些则写了备注。如果你想查找所有备注是空的订单,但用普通的=、<>去比对,你会发现结果很奇怪……为啥?因为NULL是个特殊情况!

在SQL里,检查有没有NULL要用IS NULL和IS NOT NULL。这俩操作符能帮你搞定NULL,拿到你想要的数据。

用IS NULL检查值

IS NULL用来判断某一列或者表达式是不是NULL。

SELECT *
FROM orders
WHERE comment IS NULL;

这个查询会返回所有comment列是NULL的行。很适合找那些没有备注的订单。

下面是orders表的例子:

id customer_name total_amount comment
1 Otto Art 1500 "加急送达"
2 Maria Chi 3000 NULL
3 Alex Lin 2000 ''
4 Anna Song 5000 NULL

查询:

SELECT id, customer_name
FROM orders
WHERE comment IS NULL;

结果:

id customer_name
2 Maria Chi
4 Anna Song

注意,空字符串''的那一行不会被查出来,因为''不是NULL。

用IS NOT NULL检查值

IS NOT NULL正好相反,它查的是不是NULL。比如你想找所有有备注的订单:

SELECT *
FROM orders
WHERE comment IS NOT NULL;

这个查询只会返回comment有内容的行(包括空字符串'')。

例子

orders表还是上面那个。

id customer_name total_amount comment
1 Otto Art 1500 "加急送达"
2 Maria Chi 3000 NULL
3 Alex Lin 2000 ''
4 Anna Song 5000 NULL

执行查询:

SELECT id, customer_name, comment
FROM orders
WHERE comment IS NOT NULL;

结果:

id customer_name comment
1 Otto Art "加急送达"
3 Alex Lin ''

注意,空字符串''的那一行也被查出来了。SQL觉得这不是“空”。

啥时候用IS NULL和IS NOT NULL?

举几个场景:

  1. 数据过滤:你想排除那些缺失值的记录。
  2. 错误处理:有时候NULL说明数据录入有问题,你得把这些行挑出来。
  3. 数据分析:统计缺失值的数量能帮你了解数据质量。

实战应用

来点实际操作:

任务1:选出没有填写出生日期的学生

假设你有个students表:

id name birth_date
1 Otto Art 2000-05-10
2 Maria Chi NULL
3 Alex Lin 1998-12-30
4 Anna Song NULL

查询:

SELECT name
FROM students
WHERE birth_date IS NULL;

结果:

name
Maria Chi
Anna Song

这个查询很适合找那些还没填出生日期的学生。

任务2:选出有备注的订单

id customer_name total_amount comment
1 Otto Art 1500 "加急送达"
2 Maria Chi 3000 NULL
3 Alex Lin 2000 ''
4 Anna Song 5000 NULL

对于orders表,我们可以查出有备注的订单:

SELECT customer_name, comment
FROM orders
WHERE comment IS NOT NULL;

结果:

customer_name comment
Otto Art "加急送达"
Alex Lin ''

和普通操作符的对比

现在我们来试试“错误”的写法,看看直接用操作符查NULL会咋样:

SELECT *
FROM orders
WHERE comment = NULL;

是不是很意外?这个查询啥都查不出来,就算comment明明是NULL。因为NULL不能用普通操作符比对。遇到这种情况,必须用IS NULL才行。

2
任务
SQL SELF, 第 9 级, 课程 1
已锁定
查找缺失值的记录
查找缺失值的记录
2
任务
SQL SELF, 第 9 级, 课程 1
已锁定
根据可用数据进行筛选
根据可用数据进行筛选
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION