TSQL ile Iki Tablonun Kayitlarinin Karsilastirilmasi

TSQL ile iki tablonun karsilastirilmasi :

SQL Server da iki tablo arasindaki farklarin ve benzerliklerin bulunabilmesi için EXCEPT ve INTERSECT anahtar kelimeleri kullanilir, ayni islemi yapabilmek için join ifadelerindende faydalanilabilir. Bu makalemizin genel amaci EXCEPT ve INTERSECT anahtar sözcükleri olacaktir.

EXCEPT anahtar sözcügünün kullanim sablonu :

-- SQL Server T-SQL iki tabloyu karsilastirmak.

SELECT
Etiket='Tablo1 de bulunan fakat Tablo2 de bulunmayan kayitlar',*
FROM
(
  SELECT * FROM Tablo1
    EXCEPT
  SELECT * FROM Tablo2
) x
UNION ALL
SELECT
Etiket='Tablo2 de bulunan fakat Tablo1 de bulunmayan kayitlar',*
FROM
(
  SELECT * FROM Tablo2
   EXCEPT
  SELECT * FROM Tablo1
) y

Makaledeki örneklerimizde kullacagimiz tablolar için asagidaki scripti kullanabilirsiniz.

.
create table Urun2010
(
ID int ,
UrunAdi varchar(50),
Marka varchar(30)
)
insert into Urun2010 (ID,UrunAdi,Marka) values
(1,'L2208 LCD monitor','HP'),
(2,'EliteBook 6930p Notebook','HP'),
(4,'Omnia lite Cep Telefonu','Samsung'),
(6,'JetStream Pilot Kalem','Uni'),
(7,'Galaxy II','Samsung')

create table Urun2011
(
ID int ,
UrunAdi varchar(50),
Marka varchar(30)
)
insert into Urun2011 (ID,UrunAdi,Marka) values
(1,'L2208 LCD monitor','HP'),
(3,'E71 Cep Telefonu','Nokia'),
(4,'Ominia lite Cep Telefonu','Samsung'),
(5,'Ip Phone 7911','Cisco'),
(6,'JetStream Pilot Kalem','

Urun2010 ve Urun2011 tablolarini karsilastiralim.

SELECT Etiket='Urun2011 de bulunan, Urun2010 da bulunmayan',* FROM
 (SELECT * FROM Urun2010
  EXCEPT
 SELECT * FROM Urun2011) x
UNION ALL
SELECT Etiket='Urun2010 da bulunan, Urun2011 de bulunmayan',* FROM
 (SELECT * FROM Urun2011
  EXCEPT
 SELECT * FROM Urun2010) y

--Sonuç : (4 row(s) affected

Yukaridaki sorgu ile Urun2010 ve Urun2011 tablolarini kayit bazinda karsilastirdik, böylece birinde olup digerinde olmayan kayitlari tespit ettik.

Her iki tabloda da olan kayitlari tespit etmek için INTERSECT anahtar sözcügünün kullanimi:

-- Her iki tablodada ortak olarak bulunan kayitlari bulalim
SELECT * FROM Urun2011
  INTERSECT
SELECT * FROM Urun2010

-- Sonuç : (3 row(s) affected)

Tablolar arasindaki kayit farkliliklarini bulmak için NOT EXIST veya LEFT JOIN ifadelerinide kullanabiliriz.

.
-- Urun2011 de olup Urun2010 da olmayan ürünleri bulmanin alternatif yöntemler, (NOT EXIST ve LEFT JOIN)


SELECT * FROM Urun2011 p1WHERE
NOT EXISTS
(
 SELECT * FROM Urun2010 p2
 WHERE p2.ID = p1.ID
)

-- (2 row(s) affected)

LEFT JOIN yöntemi (Ayni sonuç üretir)

SELECT * FROM Urun2011 p1
LEFT OUTER JOIN Urun2010 p2
  ON p2.ID = p1.ID
WHERE p2.ID IS NULL

-- (2 row(s) affected)
.

8 thoughts on “TSQL ile Iki Tablonun Kayitlarinin Karsilastirilmasi

  1. İkitabloyu karşılaştırdıktan sonra. Meselea 2010 da var ama 2011 de o veri yok. Bunu 2011 nasıl ekleriz ?

  2. Merhaba öncelikle verdi?iniz bilgiler için te?ekkür ederim.Tablo1 ve tablo2 yi karsyla?tyryp farkly olan ürünleri sorguladyktan sonra (bu sorgu tamam)gelen ürünlerin tabloda bulunan status kolonuna 0 de?erini atamak istiyorum.Bu konuda yardymcy olabilir misiniz?Te?ekkürler.

    De?er Giray
  3. merhaba,
    genelde left outer join kullanymy daha hyzlydyr. helede join yapylan kolonda index var ise kesinlikle tercih edilebilir.
    ama yinede tablo yapynyza göre de?i?iklik gösterme ihtimalini dü?ünerek, istatistiklere bakylmaly ve sonraki kullanymlarda hangisinin tercih edilece?ine karar verilmeli.

    SET STATISTICS IO ON diyerek istatistikleri açyp incelemenizi tavsiye ederim

  4. Merhaba,

     
    iki tablo arasyndaki farklylyklayry bulmak istedi?imizde hangi yöntem daha hyzly çaly?yr ?
     
    except mi yoksa outer join ‘i where <Kolon_Ady> is NULL kullany my my?
     
    te?ekkürler
     
     
  5. bu durumda Urun2010 da olup Urun2011 de olmayan kayitlari except ile bulur ve insert into ile bunlari Urun2011 e atarsin

     

    insert into Urun2011

    select * from Urun2010
    except
    select * from Urun2011

  6. Merhaba,

     Urun2010 da olup Urun2011 de olmayan kayitlari urun2011 tablosuna kaydedeceksiniz degilmi ?

  7.  Merhaba,

    Makale için tesekkürler.

    Urun2010  Tablomda 10 kayit var. Urun2011 tablomda ise 20 kayit var. Iki tabloda ayni 3 kayit bulunuyor.

    Ben Urun2010 tablomda bulunan datalari Urun2011 tabloma insert etmek istiyorum. Fakat ayni kayitlari insert etmeyecegim.  Bu islemi nasil gerçeklestirebilirim. 

    Tesekkürler,

     

Guests için bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir