SQL中EXCEPT和Not in的區別

2021-06-03 14:23:57 字數 1724 閱讀 4330

[**]

初始化兩張表:

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值的行

--deletefromtb1 whereid isnull

b、select*fromtb1 exceptselect*fromtb2;

select*fromtb1 whereid notin(selectid fromtb2);--得不到任何值

結果:同上a

c、把錶tb2的是null值的行也刪除

--deletefromtb2 whereid isnull

c、select*fromtb1 exceptselect*fromtb2;

select*fromtb1 whereid notin(selectid fromtb2);

結果:這是兩張表中都沒有null值時,得到的結果;

d、在tb1表中插入一條null值

d、select*fromtb1 exceptselect*fromtb2;

select*fromtb1 whereid notin(selectid fromtb2);

結果:以上例子說明: 

except會去重複,notin

不會(除非你在select中顯式指定)

except用於比較的列是所有列,除非寫子查詢限制列,notin

沒有這種情況

表tb2中如果有null值的話,not in查詢得不到值(如:a、b)

表tb1中如果有null值,not in不會查詢出這個null值(如:d),而except可以查詢到

當然通過對子查詢指定不為null的話,not in自然會得到值,如:

select * from tb1 where id not in(selectid fromtb2 whereid isnotnull);

這裡是需要注意的,如果你的字段執行為null,又欲使用not in那麼就需要這麼做

SQL中EXCEPT和Not in的區別?

except會去重複,not in 不會 除非你在select中顯式指定 except用於比較的列是所有列,除非寫子查詢限制列,not in 沒有這種情況 表tb2中如果有null值的話,not in查詢得不到值 如 a b 表tb1中如果有null值,not in不會查詢出這個null值 如 d ...

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 sele...

Python中except用法和作用

python的except用來捕獲所有異常,因為python裡面的每次錯誤都會丟擲 乙個異常,所以每個程式的錯誤都被當作乙個執行時錯誤。以下是使用except的乙個例子 try foo opne file open被錯寫為opne except sys.exit could not open fil...