SQL进阶--三值逻辑和NULL

not in 和 not exists

-- not in 和 not exists 
drop table if exists class_a;
create table class_a(
name1 varchar(20),
age   int8,
city  varchar(30)
);

insert into class_a values('布朗', 22, '东京');
insert into class_a values('拉里', 19, '琦玉');
insert into class_a values('伯杰', 21, '千叶');
drop table if exists class_b;
create table class_b like class_a;
insert into class_b values('齐藤', 22, '东京');
insert into class_b values('天口', 23, '东京');
insert into class_b values('山田', NULL, '东京');
insert into class_b values('和泉', 18, '千叶');
insert into class_b values('武田', 20, '千叶');
insert into class_b values('石川', 19, '神奈川');

查询与条件中存在NULL


-- 查询与B班住在东京的学生年龄不同的A班的学生
select  * 
  from  class_a
 where  age not in (select age from class_b where city = '东京'); -- 没有结果

-- 用not exists 可以查出
select  * 
  from  class_a a
 where  not exists (select * from class_b b where a.age = b.age and city = '东京');

not exists 语句处理NULL值的逻辑

-- 1 子查询中
select  * 
  from  class_a a
 where  not exists (select * from class_b b where a.age = null and city = '东京');
-- 2  
select  * 
  from  class_a a
where  not exists (select * from class_b b where unknown and city = '东京');
-- 3
select  * 
  from  class_a a
where  not exists (select * from class_b b where False);
-- 4
select  * 
  from  class_a a
where  True;
-- 即山田被作为“与任何人的年龄都不同的人”来处理,EXISTS 只会返回true 或者 False

内容多来自 《SQL进阶教材》,仅做笔记。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Scc_hy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值