比较运算符是 SQL 查询中最常用的运算符类型,用于比较两个值并返回布尔结果(1=TRUE,0=FALSE,NULL=未知)。以下是 MySQL 中各种比较运算符的详细说明和实际应用。
一、基本比较运算符
1. 等于运算符(=)
功能:比较两值是否相等
NULL处理:任何与NULL的比较都返回NULL
类型转换:自动进行类型转换(字符串转数字等)
SELECT 1=0, '2'=2, 2=2, '0.02'=0, 'b'='b', (1+3)=(2+2), NULL=NULL;
1=0 | '2'=2 | 2=2 | '0.02'=0 | 'b'='b' | (1+3)=(2+2) | NULL=NULL |
---|---|---|---|---|---|---|
0 | 1 | 1 | 0 | 1 | 1 | NULL |
2. 安全等于运算符(<=>)
特点:可以安全比较NULL值
NULL处理:NULL<=>NULL返回1
SELECT 1<=>0, '2'<=>2, NULL<=>NULL;
1<=>0 | '2'<=>2 | NULL<=>NULL |
---|---|---|
0 | 1 | 1 |
3. 不等于运算符(<>或!=)
SELECT 'good'<>'god', 1<>2, NULL<>NULL;
'good'<>'god' | 1<>2 | NULL<>NULL |
---|---|---|
1 | 1 | NULL |
二、数值比较运算符
1. 小于(<)
SELECT 1<2, 4<4, 5.5<5, NULL<NULL;
1<2 | 4<4 | 5.5<5 | NULL<NULL |
---|---|---|---|
1 | 0 | 0 | NULL |
2. 小于等于(<=)
SELECT 1<=2, 4<=4, 5.5<=5;
1<=2 | 4<=4 | 5.5<=5 |
---|---|---|
1 | 1 | 0 |
3. 大于(>)
SELECT 1>2, 4>4, 5.5>5;
1>2 | 4>4 | 5.5>5 |
---|---|---|
0 | 0 | 1 |
4. 大于等于(>=)
SELECT 1>=2, 4>=4, 5.5>=5;
1>=2 | 4>=4 | 5.5>=5 |
---|---|---|
0 | 1 | 1 |
三、特殊比较运算符
1. IS NULL / ISNULL()
SELECT NULL IS NULL, ISNULL(NULL), ISNULL(10);
NULL IS NULL | ISNULL(NULL) | ISNULL(10) |
---|---|---|
1 | 1 | 0 |
2. IS NOT NULL
SELECT 10 IS NOT NULL, NULL IS NOT NULL;
10 IS NOT NULL | NULL IS NOT NULL |
---|---|
1 | 0 |
3. BETWEEN AND
SELECT 4 BETWEEN 2 AND 5, 12 BETWEEN 9 AND 10;
4 BETWEEN 2 AND 5 | 12 BETWEEN 9 AND 10 |
---|---|
1 | 0 |
四、字符串比较特点
1. 不区分大小写(默认情况下):
SELECT 'a'='A'; -- 返回1
2. 字典序比较:
SELECT 'apple' < 'banana'; -- 返回1
3. 使用BINARY关键字区分大小写:
SELECT BINARY 'a'='A'; -- 返回0
五、实际应用示例
1. 用户年龄筛选:
SELECT * FROM users WHERE age BETWEEN 18 AND 30;
2. 产品价格查询:
SELECT * FROM products WHERE price > 100 AND discount_price IS NOT NULL;
3. 订单状态检查:
SELECT * FROM orders WHERE status = 'shipped' AND ship_date <= CURDATE();
六、注意事项
1. NULL处理:大多数比较运算符遇到NULL会返回NULL
2. 类型转换:比较前MySQL会尝试类型转换
3. 性能考虑:避免在索引列上使用函数或类型转换
4. 字符集影响:不同字符集的字符串比较可能产生不同结果
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程