在日常使用数据库时,你在意过NULL么?
其实,NULL值在数据库中是一个很特殊且有趣的存在,正式开始之前,我们先来瞅下MYSQL的配置和版本号,下面我们一起来看看吧;
比如你在查询数据库时,想知道一个列(例如:用户注册年限 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”关键词?,不是吗? 例如,如果我们想要知道一个列的值是不是等于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,这个查询语句不会返回任何数据的: