MySQL中的=操作符和<=>操作符

200 阅读1分钟

情景:

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;