Oracle 中exists、not exists、in、not in 对于 null 值的判断

版权声明:转载时,请在文章开头明显位置注明出处! https://blog.csdn.net/qq_34745941/article/details/85085866

1 思维导图

描述

2、实例分析

2.1 in、not in

  • in 相当于 或 || 运算,只要满足一个即可
  • not in 相当与 与 && 运算,必须全部满足
  • Oracle 中 只能用 is null 和 is not null 来判断 空值,故 null 与 任何值进行 ‘值比较(=,<> 等) 都是 false
-- 说明:true: 有返回值, false: 无返回值
SELECT 'false' result1 FROM dual WHERE 1 IN (2, NULL);  
SELECT 'true'  result2 FROM dual WHERE 1 IN (2, NULL, 1); 

SELECT 'fasle' result3 FROM dual WHERE 1 NOT IN (2, NULL);  
SELECT 'fasle' result4 FROM dual WHERE 1 NOT IN (2, NULL, 1); 

解释:
第2行: 1=2 || 1=null => false || false => 无返回结果
第3行: 1=2 || 1=null || 1=1 => false || false || true => 返回 ‘true’
第5行: 1<>2 && 1<>null => true && false => 无返回结果
第6行: 1<>2 && 1<>null && 1<>1 => true && false && true => 无返回结果

2.2 exists、not exists

  • exists 与 not exists 相当于一种逻辑判断,exists 的本质就是返回一个布尔值,exists 测试关联子查询是否有数据返回,如果有至少一行返回的话则 exists 判断为真返回 true
  • not exists 判断关联子查询是否没有数据返回, 如果没有数据返回则判断为真,返回true。
SELECT 'false'
  FROM dual t 
 WHERE EXISTS(SELECT 1
                FROM dual t2
               WHERE t2.dummy = NULL);
SELECT 'true'
  FROM dual t 
 WHERE NOT EXISTS(SELECT 1
                    FROM dual t2
                   WHERE t2.dummy = NULL);

2.3 二元值判断

  • 想象成 坐标,只要有一个坐标对不上这个就是不相等的(或运算
  • null 与任何值进行 值比较(=、<> 等) 都是 false
select 'true' from dual where (1,2) not in ((2,3),(2,null));
select 'true' from dual where (2,1) not in ((2,3),(2,null));
select 'true' from dual where (2,1) not in ((2,3),(null,3));
select 'true' from dual where (2,1) not in ((2,3),(null,1));
------------ 以上均显示、以下均不显示
select 'false' from dual where (1,2) in ((2,3),(2,null));
select 'false' from dual where (2,1) in ((2,3),(2,null));
select 'false' from dual where (2,1) in ((2,3),(null,3));
select 'false' from dual where (2,1) in ((2,3),(null,1));

解释:
如 第1行中:坐标(1,2)不是(2,3)且也不是(2,null)? => 1<>2 || 2<>null => true

猜你喜欢

转载自blog.csdn.net/qq_34745941/article/details/85085866