MySQL <=> 运算符详解

Write Comment

MySQL <=> 运算符详解

用户已注销

MySQL <=> 运算符详解

一、作用全称

安全等于运算符(NULL-safe equal) 专门解决普通 = 无法判断 NULL 的问题。

二、对比 =<=>

1. 普通 = 特点

  • NULL = NULL结果为 NULL(不是真)
  • NULL = 任意值结果为 NULL MySQL 中 NULL 参与等值判断,永远不会得到 1(真)

示例:

SELECT NULL = NULL;    -- NULL
SELECT NULL = 1;       -- NULL
SELECT 2 = 2;          -- 1

2. <=> 安全等于规则

  1. A <=> B:两个值相等返回 1,不等返回 0
  2. 两个都是 NULL → 返回 1(视为相等)
  3. 一边 NULL、一边非 NULL → 返回 0

示例:

SELECT NULL <=> NULL;  -- 1
SELECT NULL <=> 1;     -- 0
SELECT 2 <=> 2;        -- 1
SELECT 3 <=> 5;        -- 0

三、常用场景

场景1:查询字段可为 NULL 的等值匹配

userphone 允许为 NULL,要查出 phone 等于指定值(包含匹配 NULL) 错误写法(查不到 phone 为 NULL 的行):

SELECT * FROM user WHERE phone = NULL;

正确写法:

SELECT * FROM user WHERE phone <=> NULL;

等价替代写法(繁琐):

WHERE (phone = '目标值') OR (phone IS NULL AND '目标值' IS NULL)

场景2:JOIN 关联可空字段

两表关联字段允许为 NULL,想用 NULL 匹配 NULL:

SELECT * FROM a
JOIN b ON a.col <=> b.col;

四、取反写法

不等于、包含 NULL 判断:

NOT (a <=> b)

等价于:a 不等于 b 或其中一个为 NULL

总结

表达式 = 结果 <=> 结果
NULL=NULL NULL 1
NULL=5 NULL 0
5=5 1 1
5=6 0 0

一句话:<=> 是能正确处理 NULL 的等于判断符

THE END
Like
Share

登录 to comment~