SQLServer兩張表篩選相同數據和不同數據

轉自:https://www.cnblogs.com/sunxuchu/p/5433882.html

概述

項目中經常會對兩張數據庫表的數據進行比較,選出相同的數據或者不同的數據。在SQL SERVER 2000中只能用Exists來判斷,到了SQL SERVER 2005以後可以採用EXCEPT和INTERSECT運算符比較兩張表的數據。

EXCEPT運算符返回由EXCEPT運算符左側的查詢返回、而又不包含在右側查詢所返回的值中的所有非重複值。

INTERSECT返回由INTERSECT運算符左側和右側的查詢都返回的所有非重複值。

例如有表A和B,其建表和數據腳本如下:

 

if object_id('[a]') is not null drop table [a]
go 
create table [a]([tel_no] bigint,[cost] int)
insert [a]
select 13800000000,38 union all
select 13823400000,56 union all
select 13800056400,88 union all
select 13800230000,28 union all
select 13802300000,18 union all
select 13822220000,68 union all
select 13844400000,98 union all
select 13833330000,35 union all
select 13822220000,31 union all
select 13811110000,32
--> 測試數據:[b]
if object_id('[b]') is not null drop table [b]
go 
create table [b]([tel_no] bigint)
insert [b]
select 13800000000 union all
select 13823400000 union all
select 13800051230 union all
select 13800230123

現在要查出兩張表相同的數據和兩張表不同的數據,如果在SQL SERVER 2005以上版本:

 

--相同數據
select tel_no  
from a
intersect
select tel_no 
from b

--不同數據
select tel_no  
from b
except
select tel_no 
from a

如果是SQL SERVER 2000

SELECT * FROM b WHERE EXISTS(SELECT 1 FROM a WHERE tel_no=b.tel_no)
 
SELECT * FROM b WHERE NOT EXISTS(SELECT 1 FROM a WHERE tel_no=b.tel_no)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章