版权声明:转载时,请在文章开头明显位置注明出处! 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