关于in、not in和or之间的处理细节

29 阅读1分钟

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的数据。