SQL Server兩張表篩選相同數據和不同數據


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM