手把手教你如何处理烦人的NULL值

本文探讨了在数据库中处理NULL值的重要性,解释了为何在SQL查询中使用`IS NULL`,并介绍了NULL值在比较时的特殊性。讨论了三元逻辑、`NULL`与`NOT IN`的关系,以及在`COUNT`、`DISTINCT`和`SELECT`查询中遇到的问题和解决方案。此外,还提到了`NULL`值如何增加查询难度和可能导致的空指针异常,强调了在表设计时避免NULL值的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在日常使用数据库时,你在意过NULL么?

其实,NULL值在数据库中是一个很特殊且有趣的存在,正式开始之前,我们先来瞅下MYSQL的配置和版本号,下面我们一起来看看吧; 3 2 比如你在查询数据库时,想知道一个列(例如:用户注册年限 USER_AGE)是否为 NULL,SQL查询语句该怎么写呢?
是这样:

SELECT * FROM TABLE WHERE USER_AGE = NULL;

还是这样:

SELECT * FROM TABLE WHERE USER_AGE IS NULL;

当然,正确的写法应该是第二种 WHERE USER_AGE IS NULL

但为什么要这样写呢?进行数据库数据比较的时侯,我们不会使用“IS”关键词?,不是吗? 4 例如,如果我们想要知道一个列的值是不是等于1, WHERE语句是这样的:

WHERE USER_AGE = 1;

思考

那为什么NULL 值要用IS呢?为什么要以这种方式来处理?

因为,在SQL中,NULL表示“未知”的意思。也就是说,NULL值表示的是“未知”的值。

NULL=未知; 在大多数数据库中,NULL和空字符串是有很大区别的;

比方说 Oracle就不支持空字符串,它会把空字符串自动转成NULL:

在其他大多数数据库里,NULL值和字符串的处理方式是不一样的:

空字符("")串虽然表示“没有值”,但这个值是确定的。 NULL 表示 “未知值”,这个值是不知道的。 这就好比我问了一个问题:“贾玲的小名叫什么?”

有人会回答说:“我咋知道贾玲的小名是什么”。对于这种情况,可以在数据库中使用Nickname列来表示贾玲的小名,而这一列的值就是NULL。

也有人会回答说:“贾玲没有小名。他的父母没有给她取小名,大家虽然一直叫玲小花,但是可能知道贾玲确实没有小名”。对于这种情况,Nickname列应该是一个空字符串,长这样("");

Oracle就比较特殊,两个值都是使用 NULL来表示,而其他大多数数据库都会区分对待的。

结论:记住一点 NULL表示的是一个未知值,那么在写SQL查询就会好一些;

例如,你有一个这样的查询语句:

SELECT * FROM SOME_TABLE WHERE 1 = 1;

这个查询会返回所有的行(假设 SOME_TABLE不是空表的话),因为表达式“1=1”一定是对;

那么如果我这样写:

SELECT * FROM SOME_TABLE WHERE 1 = 0;

表达式“1=0”是false,这个查询语句不会返回任何数据的:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙哥手记

非常感谢你的赞赏,一起加油整起

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值