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;

EXCEPT
İlk tabloda olup ikinci tabloda olmayan kayıtları getirir:
SELECT * FROM dbo.Table1
EXCEPT
SELECT * FROM dbo.Table2;

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 BYyalnı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,EXCEPTveUNION‘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
- SQL Server’da Pencere Fonksiyonları: Sıralama, LAG ve Kümülatif Toplam
- T-SQL’de RegEx Dönemi: SQL Server 2025’in Yeni Düzenli İfade Fonksiyonları
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.
