[**]
初始化兩張表:
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...