MySQL 比较运算符详解
(1)符号类型运算符
| 运算符 | 名称 | 作用 | 示例 | 
|---|---|---|---|
| = | 等于运算符 | 判断两个值、字符串或表达式是否相等 | SELECT * FROM users WHERE age = 25SELECT name FROM products WHERE category = 'Electronics' | 
| <=> | 安全等于运算符 | 安全地判断两个值、字符串或表达式是否相等(兼容NULL值) | SELECT * FROM employees WHERE salary <=> NULLSELECT * FROM orders WHERE coupon_code <=> 'DISCOUNT' | 
| <> | 不等于运算符 | 判断两个值、字符串或表达式是否不相等 | SELECT * FROM students WHERE gender <> 'F'SELECT id FROM logs WHERE status <> 200 | 
| != | 不等于运算符 | 判断两个值、字符串或表达式是否不相等 | SELECT * FROM inventory WHERE quantity != 0SELECT email FROM users WHERE deleted_at != NULL | 
| < | 小于运算符 | 判断前面的值是否小于后面的值 | SELECT * FROM products WHERE price < 100SELECT * FROM events WHERE start_time < '2023-01-01' | 
| <= | 小于等于运算符 | 判断前面的值是否小于等于后面的值 | SELECT * FROM members WHERE age <= 18SELECT * FROM tasks WHERE priority <= 3 | 
| > | 大于运算符 | 判断前面的值是否大于后面的值 | SELECT * FROM employees WHERE salary > 5000SELECT * FROM articles WHERE views > 1000 | 
| >= | 大于等于运算符 | 判断前面的值是否大于等于后面的值 | SELECT * FROM candidates WHERE score >= 60SELECT * FROM reservations WHERE guests >= 4 | 
1. 等于运算符 =
 
- 作用:判断两个值、字符串或表达式是否相等
- 特点: - 严格比较(NULL = NULL 返回NULL)
- 区分大小写(取决于数据库配置)
 
- 示例:-- 数值比较 SELECT * FROM employees WHERE salary = 5000;-- 字符串比较 SELECT * FROM products WHERE name = 'Laptop';
2. 安全等于运算符 <=>
 
- 作用:安全地判断两个值/字符串/表达式是否相等(含NULL值)
- 特点: - NULL <=> NULL 返回TRUE
- 其他情况与 =相同
 
- 示例:-- NULL值安全比较 SELECT * FROM customers WHERE phone_number <=> NULL;-- 常规比较 SELECT * FROM orders WHERE status <=> 'completed';
3. 不等于运算符 <> 或 !=
 
- 作用:判断两个值/字符串/表达式是否不相等
- 特点: - <>是标准SQL语法
- !=是兼容性语法
- 两者功能完全相同
 
- 示例:-- 使用<> SELECT * FROM students WHERE grade <> 'F';-- 使用!= SELECT * FROM inventory WHERE stock_quantity != 0;
4. 小于运算符 <
 
- 作用:判断前面的值是否小于后面的值
- 数据类型支持: - 数值:3 < 5→ TRUE
- 字符串:按字典序比较
- 日期:'2023-01-01' < '2023-02-01'→ TRUE
 
- 数值:
- 示例:-- 数值比较 SELECT * FROM products WHERE price < 1000;-- 日期比较 SELECT * FROM events WHERE start_date < CURRENT_DATE;
5. 小于等于运算符 <=
 
- 作用:判断前面的值是否小于或等于后面的值
- 边界情况: - 5 <= 5→ TRUE
- NULL <= 5→ NULL
 
- 示例:-- 年龄筛选 SELECT * FROM users WHERE age <= 18;-- 库存检查 SELECT * FROM warehouse WHERE quantity <= reorder_level;
6. 大于运算符 >
 
- 作用:判断前面的值是否大于后面的值
- 字符串比较规则: - 'Apple' > 'Banana'→ FALSE(按字符编码比较)
- 大小写敏感(‘A’ > ‘a’ 结果取决于排序规则)
 
- 示例:-- 薪资查询 SELECT name FROM employees WHERE salary > 10000;-- 时间范围 SELECT * FROM logs WHERE timestamp > '2023-06-01 00:00:00';
7. 大于等于运算符 >=
 
- 作用:判断前面的值是否大于或等于后面的值
- 特殊注意: - 对NULL值的比较总是返回NULL
- 适用于范围查询的闭合区间
 
- 示例:-- 分数筛选 SELECT student_id FROM exams WHERE score >= 60;-- 日期范围 SELECT * FROM reservations WHERE end_date >= '2023-12-31';
8.综合比较表
| 运算符 | NULL处理 | 适用场景 | 典型用例 | 
|---|---|---|---|
| = | 返回NULL | 精确匹配查询 | 用户登录验证 | 
| <=> | 返回TRUE | 需要包含NULL值的比较 | 可选字段检查 | 
| <>/!= | 返回NULL | 排除特定值的查询 | 过滤无效记录 | 
| < | 返回NULL | 范围查询(开区间) | 查找历史数据 | 
| <= | 返回NULL | 范围查询(闭区间) | 统计截止某日期的数据 | 
| > | 返回NULL | 下限筛选 | 查找高价值客户 | 
| >= | 返回NULL | 下限筛选(含边界) | 达标数据筛选 | 
(2)非符号类型运算符
| 运算符 | 名称 | 作用 | 示例 | 
|---|---|---|---|
| IS NULL | 为空运算符 | 判断值/字符串/表达式是否为空 | SELECT B FROM table WHERE A IS NULL | 
| IS NOT NULL | 不为空运算符 | 判断值/字符串/表达式是否不为空 | SELECT B FROM table WHERE A IS NOT NULL | 
| LEAST | 最小值运算符 | 在多个值中返回最小值 | SELECT D FROM table WHERE C = LEAST(A,B) | 
| GREATEST | 最大值运算符 | 在多个值中返回最大值 | SELECT D FROM table WHERE C = GREATEST(A,B) | 
| BETWEEN | 区间运算符 | 判断值是否在两个值之间 | SELECT D FROM table WHERE C BETWEEN A AND B | 
| IN | 属于运算符 | 判断值是否为列表中的任意一个 | SELECT D FROM table WHERE C IN (A,B) | 
| NOT IN | 不属于运算符 | 判断值是否不在列表中 | SELECT D FROM table WHERE C NOT IN (A,B) | 
| LIKE | 模糊匹配运算符 | 判断值是否符合模糊匹配规则 | SELECT C FROM table WHERE A LIKE B | 
| REGEXP/RLIKE | 正则表达式运算符 | 判断值是否符合正则表达式 | SELECT C FROM table WHERE A REGEXP B | 
一、空值判断运算符
1. IS NULL
 
- 功能:判断值/字符串/表达式是否为空
- 语法:WHERE column IS NULL
- 特点: - 唯一正确的NULL值判断方式(= NULL是错误语法)
- 适用于所有数据类型
 
- 唯一正确的NULL值判断方式(
- 示例:-- 查找未填写电话号码的用户 SELECT * FROM users WHERE phone IS NULL;
2. IS NOT NULL
 
- 功能:判断值/字符串/表达式是否不为空
- 语法:WHERE column IS NOT NULL
- 应用场景: - 数据完整性检查
- 有效记录筛选
 
- 示例:-- 查找已激活的用户(email不为空) SELECT * FROM accounts WHERE email IS NOT NULL;
二、极值运算符
3. LEAST
 
- 功能:返回参数列表中的最小值
- 特点: - 支持2个及以上参数
- 可比较数值/字符串/日期等类型
 
- 示例:-- 获取最早日期 SELECT LEAST('2023-01-01', '2022-12-31', '2023-05-15');
4. GREATEST
 
- 功能:返回参数列表中的最大值
- 典型应用: - 价格上限控制
- 有效期计算
 
- 示例:-- 计算最终价格(不超过建议零售价) SELECT product_id, LEAST(price, msrp) AS final_price FROM products;
三、范围运算符
5. BETWEEN
 
- 功能:判断值是否在指定范围内(闭区间)
- 等效写法:WHERE x >= a AND x <= b
- 注意事项: - 总是先写小值再写大值
- 日期范围查询时包含边界
 
- 示例:-- 查询2023年Q2订单 SELECT * FROM orders WHERE order_date BETWEEN '2023-04-01' AND '2023-06-30';
四、集合运算符
6. IN
 
- 功能:判断值是否在指定列表中
- 性能建议: - 列表项超过100时考虑临时表
- 支持子查询
 
- 示例:-- 查找特定品类商品 SELECT * FROM products WHERE category_id IN (1, 3, 5);
7. NOT IN
 
- 功能:判断值是否不在指定列表中
- NULL值陷阱: - 当列表包含NULL时,所有比较返回NULL
- 建议配合IS NOT NULL使用
 
- 示例:-- 排除测试账户 SELECT * FROM users WHERE user_id NOT IN (999, 1000);
五、模式匹配运算符
8. LIKE
 
- 通配符: 符号 功能 %匹配任意数量字符 _匹配单个字符 
- 大小写敏感:取决于数据库配置
- 示例:-- 查找J开头的姓名 SELECT * FROM employees WHERE name LIKE 'J%';
9. REGEXP/RLIKE
 
- 功能:正则表达式匹配(两者完全等效)
- 常用模式: - ^:字符串开始
- $:字符串结束
- [0-9]:数字字符
 
- 示例:-- 验证邮箱格式 SELECT * FROM contacts WHERE email REGEXP '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$';
六、特殊说明
10. ISNULL(MySQL特有)
 
- 注意:与IS NULL功能相同,但非SQL标准
- 建议:优先使用标准语法IS NULL
