SQL中EXCEPT和Notin的区别

SQL中EXCEPT和Not in的区别? 我们一起来看看。

初始化两张表:

CREATE TABLE tb1(ID int)
INSERT tb1          SELECT NULL
UNION  ALL          SELECT NULL
UNION  ALL          SELECT NULL
UNION  ALL          SELECT 1
UNION  ALL          SELECT 2
UNION  ALL          SELECT 2
UNION  ALL          SELECT 2
UNION  ALL          SELECT 3
UNION  ALL          SELECT 4
UNION  ALL          SELECT 4

 

CREATE TABLE tb2(ID int)

INSERT tb2        SELECT NULL

UNION  ALL          SELECT 1

UNION  ALL          SELECT 3

UNION  ALL          SELECT 4

UNION  ALL          SELECT 4

A:

SELECT * FROM tb1

SELECT * FROM tb2

 

 

SELECT * FROM tb1 EXCEPT SELECT * FROM tb2;

SELECT * FROM tb1 WHERE id NOT IN(SELECT id FROM tb2);--得不到任何值

结果:

B、我先删除表tb1的是NULL值的行

--DELETE FROM tb1 where id is null

B、

 

 

SELECT * FROM tb1 EXCEPT SELECT * FROM tb2;

SELECT * FROM tb1 WHERE id NOT IN(SELECT id FROM tb2);

结果:

以上例子说明: 

except会去重复, not in 不会(除非你在select中显式指定)

except用于比较的列是所有列, 除非写子查询限制列, not in 没有这种情况

tb2中如果有null值的话,not in查询得不到值(如:AB

tb1中如果有null值,not in不会查询出这个null值(如:D),而except可以查询到

当然通过对子查询指定不为NULL的话,NOT IN自然会得到值,如:

SELECT * FROM tb1 WHERE id NOT IN(SELECT id FROM tb2 WHERE ID IS NOT NULL);

这里是需要注意的,如果你的字段运行为NULL,又欲使用NOT IN那么就需要这么做

 

NOT IN () 的条件中出现NULL的话就查不到任何值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值