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. <=> 安全等于规则
A <=> B:两个值相等返回1,不等返回0- 两个都是 NULL → 返回 1(视为相等)
- 一边 NULL、一边非 NULL → 返回 0
示例:
SELECT NULL <=> NULL; -- 1
SELECT NULL <=> 1; -- 0
SELECT 2 <=> 2; -- 1
SELECT 3 <=> 5; -- 0
三、常用场景
场景1:查询字段可为 NULL 的等值匹配
表 user 有 phone 允许为 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 的等于判断符。