in、not in和or之间的处理细节
创建测试表,并插入模拟数据
CREATE TABLE t4
(
settle_status string
);
-- 插入模拟数据
INSERT into TABLE t4 select '1';
INSERT INTO TABLE t4 select '2';
INSERT INTO TABLE t4 select '3';
INSERT INTO TABLE t4 select '4';
INSERT INTO TABLE t4 select '5';
INSERT INTO TABLE t4 select '10';
INSERT INTO TABLE t4 select '80';
1. in
select settle_status
from t4
where settle_status in('10','80');
-- 执行结果
+----------------+
| settle_status |
+----------------+
| 10 |
| 80 |
+----------------+
in中的所有条件之间是 或 关系。
2. not in
select settle_status
from t4
where settle_status not in('10','80');
-- 执行结果
+----------------+
| settle_status |
+----------------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+----------------+
not in的所有条件之间是 且 关系,即settle_status != '10' and settle_status != '80'
3. or
select settle_status
from t4
where settle_status != '10' or settle_status != '80';
-- 执行结果
+----------------+
| settle_status |
+----------------+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 10 |
| 80 |
+----------------+
结果中仍然出现了值为10和80的结果。sql中多个or条件,任意一个条件成立,则整体成立。。
对于值为10的数据,settle_status != '10'为false,但是 settle_status != '80'为true,因此值为10的数据满足where条件,值为80的数据同理,因此结果中出现了10和80的数据。