情景:
user1表中,有一批数据中,user_name 为 NULL,该怎么查呢?
首先,想到的是 user_name is null;
SELECT * FROM user1 where user_name IS NULL;
肯定可以查出来。但是为什么用 = NULL就查不出来呢?
SELECT * FROM user1 WHERE user_name = NULL;
在此,引入一个操作符 <=> ,他也是等于的意思,只不过比普通的 = 多了一层含义。
相同点:等号左右两侧,相等时结果为1,不相等时结果为0。
- 'a' = 'a' 结果为1
- 'a' <=> 'a' 结果为1
- 'a' = 'b' 结果为0
- 'a' <=> 'b' 结果为0
不同点:= 中的NULL值是没有意义的,<=> 中,NULL值有意义,举例:
- 'a' = NULL 结果为 NULL
- 'a' <=> NULL 结果为 0
- NULL = NULL 结果为 NULL
- NULL <=> NULL 结果为 1
因此,<=>又称为安全等
所以,一开始的例子中,要想查user_name 为 NULL,也可以这么查:
SELECT * FROM user1 WHERE user_name <=> NULL;
总结:
- 如果需要与NULL进行判断,则使用 <=>,等价于 IS NULL
- 阅读官网时,遇到该操作符,以前没见过,故记录分享一下
扩展验证:
SELECT * FROM user1 WHERE NULL = NULL LIMIT 10;
SELECT * FROM user1 WHERE NULL <=> NULL LIMIT 10;