İçeriğe geç

T-SQL’de INTERSECT ve EXCEPT Kullanımı

İki sorgu sonucunun ortak ve farklı kayıtlarını bulmanın en kısa yolu: INTERSECT ve EXCEPT. Örneklerle kullanımı ve NOT IN'den farkı.

T-SQL güncellendi 25.10.2026 3 dk okuma Atılay Berber

Merhabalar,

Bu yazıda T-SQL’de INTERSECT ve EXCEPT operatörlerinin ne işe yaradığını ve nasıl kullanıldığını örneklerle paylaşacağım.

  • INTERSECT: Aynı yapıdaki (aynı sayıda ve uyumlu tipte sütun) iki tablo ya da sorgu sonucu arasındaki ortak kayıtları döndürür.
  • EXCEPT: İlk sorgu sonucunda olup ikincisinde olmayan kayıtları döndürür.

Her iki operatör de sonuçtaki tekrar eden satırları tekilleştirir ve NULL değerleri birbirine eşit kabul eder. Bu yönüyle NOT IN ya da JOIN ile yazılan karşılaştırmalardan ayrılır.

Örnek tablolar

CREATE TABLE dbo.Table1 (
    UrunAdi        varchar(50) NULL,
    UrunKategorisi varchar(50) NULL
);

CREATE TABLE dbo.Table2 (
    UrunAdi        varchar(50) NULL,
    UrunKategorisi varchar(50) NULL
);

INSERT INTO dbo.Table1 (UrunAdi, UrunKategorisi)
VALUES ('Klavye',  'Bilgisayar'),
       ('Mouse',   'Bilgisayar'),
       ('Monitör', 'Bilgisayar'),
       ('Yazıcı',  'Bilgisayar');

INSERT INTO dbo.Table2 (UrunAdi, UrunKategorisi)
VALUES ('Mouse',  'Bilgisayar'),
       ('Yazıcı', 'Bilgisayar');

INTERSECT

İki sonuç kümesinde kesişen (ortak olan) kayıtları getirir:

SELECT * FROM dbo.Table1
INTERSECT
SELECT * FROM dbo.Table2;
INTERSECT sorgusunun sonucu: Mouse ve Yazıcı

EXCEPT

İlk tabloda olup ikinci tabloda olmayan kayıtları getirir:

SELECT * FROM dbo.Table1
EXCEPT
SELECT * FROM dbo.Table2;
EXCEPT sorgusunun sonucu: Klavye ve Monitör

Nerede işe yarar?

  • İki ortam (test ve canlı) arasındaki tablo içeriklerini karşılaştırmak
  • Bir ETL yüklemesinden önce ve sonra hangi kayıtların eklendiğini ya da kaybolduğunu bulmak
  • Kaynak sistemle veri ambarı arasında mutabakat kontrolleri yapmak

EXCEPT‘te sorguların sırası önemlidir: A EXCEPT B ile B EXCEPT A farklı sonuç verir. İki yöndeki farkları birlikte görmek için iki sorguyu UNION ALL ile birleştirebilirsiniz.

Sık yapılan hatalar

  • Sütun sayısı ya da tipi uyuşmuyor: İki sorgu aynı sayıda sütun döndürmeli ve sütun tipleri uyumlu olmalı; aksi halde sorgu hata verir.
  • Sütunların ada göre eşleştiğini sanmak: Eşleşme sütun sırasına göre yapılır, ada göre değil. Bu yüzden SELECT * yerine sütunları açıkça ve aynı sırayla yazmak daha güvenlidir.
  • ORDER BY’ı ilk sorguya koymak: ORDER BY yalnızca en sondaki sorguda, tüm sonucu sıralamak için kullanılabilir.
  • Öncelik sırasını unutmak: Aynı ifadede birden fazla operatör varsa INTERSECT, EXCEPT ve UNION‘dan önce değerlendirilir. Niyetinizi parantezle açıkça belirtin.

Sık sorulan sorular

EXCEPT ile NOT EXISTS arasındaki fark nedir?

EXCEPT sonucu tekilleştirir ve NULL değerleri birbirine eşit sayar; tüm sütunları birlikte karşılaştırır. NOT EXISTS ise tekrar eden satırları korur ve yalnızca sizin yazdığınız koşula bakar. Tam satır karşılaştırması için EXCEPT, belirli bir anahtara göre fark bulmak için NOT EXISTS daha uygundur.

NOT IN neden beklenmedik şekilde boş sonuç döndürüyor?

Alt sorgunun döndürdüğü listede tek bir NULL varsa NOT IN hiçbir satır döndürmez, çünkü NULL ile karşılaştırma bilinmeyen sonuç üretir. EXCEPT ya da NOT EXISTS bu tuzağa düşmez.

İlgili yazılar

HABERDAR OL

Yeni rehberler, kategorilere ayrılmış tek bir e-postada.

Her pazartesi, o hafta yayımlanan yazılar konu başlıklarına göre derlenmiş olarak gelen kutunda. Yeni yazı yoksa e-posta da yok.

Onay e-postasındaki bağlantıya tıklamadan liste aktif olmaz. İstediğin an tek tıkla çıkabilirsin.

Faydalı bulduysan paylaş
LinkedIn'de paylaş X WhatsApp

Yorum yaz

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir