博客原著地址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)