MySQL中的<=>操作符是专门用于比较运算的特殊符号,它和普通等号最大的不同在于可以正确处理NULL值的比较,在很多涉及空值判断的查询场景中能发挥重要作用。

<=>操作符的基本语法
<=>操作符的语法格式和普通比较操作符一致,使用方式为表达式1 <=> 表达式2,它会返回一个布尔类型的结果,结果只有0、1和NULL三种情况。
具体的返回规则如下:
- 如果两个表达式的值相等,且都不为NULL,返回1
- 如果两个表达式的值相等,且都为NULL,返回1
- 如果两个表达式的值不相等,返回0
- 如果其中一个表达式为NULL,另一个不为NULL,返回0
和等号操作符的区别
普通等号=操作符在遇到NULL值比较时,结果会直接返回NULL,而<=>操作符会把两个NULL值的比较结果判定为相等,这是两者最核心的差异。
我们可以通过下面的对比示例来直观看到区别:
-- 普通等号比较NULL和NULL,返回NULL SELECT NULL = NULL; -- 结果:NULL -- <=>比较NULL和NULL,返回1 SELECT NULL <=> NULL; -- 结果:1 -- 普通等号比较1和NULL,返回NULL SELECT 1 = NULL; -- 结果:NULL -- <=>比较1和NULL,返回0 SELECT 1 <=> NULL; -- 结果:0
实际使用示例
查询某字段值为NULL的记录
当我们需要查询表中某个字段值为NULL的所有记录时,使用<=>操作符可以简化判断逻辑,不需要额外使用IS NULL语法。
-- 创建测试表
CREATE TABLE test_user (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
age INT
);
-- 插入测试数据,包含age为NULL的记录
INSERT INTO test_user (name, age) VALUES ('张三', 20), ('李四', NULL), ('王五', 25);
-- 使用<=>查询age为NULL的用户
SELECT * FROM test_user WHERE age <=> NULL;
-- 结果会返回李四的那条记录
多字段联合比较
在需要同时比较两个字段,且两个字段都可能存在NULL值的场景下,<=>操作符能避免复杂的NULL判断逻辑。
-- 查询name和age都和指定值匹配的记录,指定值包含NULL SELECT * FROM test_user WHERE name <=> '李四' AND age <=> NULL; -- 结果会返回李四的那条记录
适用场景总结
当你的查询场景中存在以下需求时,可以优先考虑使用<=>操作符:
- 需要直接比较两个值是否相等,且两个值都可能是NULL
- 希望简化包含NULL值的比较逻辑,减少IS NULL、IS NOT NULL的额外判断
- 在联合比较多个可能包含NULL的字段时,保持逻辑简洁
需要注意的是,<=>操作符仅适用于MySQL数据库,其他数据库如PostgreSQL、Oracle等并不支持该操作符,在跨数据库开发时需要注意兼容性。
MySQL<=>_operator数据库查询空值比较修改时间:2026-07-12 05:03:16