Makale Özeti

Merhaba Sevgili Arkadaşlar, Bu gün sizlere ileri sorgulama tekniklerinden olan EXCEPT ve INTERSECT özelliklerinden bahsedeceğim. Genelde Developer arkadaşlarımızın fazla kullanmadığı ileri sorgulama teknikleri içerisinde bulunan bu özellikleri adım adım değineceğiz.

Makale

 

Merhaba Sevgili Arkadaşlar, Bu gün şirketten bir abimle malum iş çıkışı İstanbul trafiğine mağdur durumda kalmışken eve giden yolda güzel ve koyu bir sohbet eşliğinde yolculuğumuzu icra etmeye çalıştık.Bir yandantrafikle savaşırken diğer yandan da SQL Server üzerine muhabbetimiz oldu.Bu muhabbetin üzerine sizlere bu gün saygyıdeğer Mustafa abimle konuştuğumuz konulardan biri olan INTERSECT  ve EXCEPT komutundan bahsedeceğim.

INTERSECT Komutu

Adından da anlaşılacağı gibi iki sorgu sonucunun kesişimini elde etmek için kullanılır.Yani iki sorgu sonucunu Intersect komutu ile birleştirdiğimizde her iki sorgu sonucunda da dönen kayıtlar listelenecektir. Eğer küme yöntemi ile gösterecek olursak A ve B Kümesinin ortak olan noktasındaki verileri görmemizi sağlar. Eğer küme yöntemi ile gösterecek olursak A ve B Kümesinin ortak olan noktasındaki verileri görmemizi sağlar.       Konuyu daha iyi anlamak için bir örnek yapalım. Syntax;
1 SELECT FROM b
2 INTERSECT
3 SELECT FROM b
şeklindedir.
1 SELECT Cont_No FROM dbo.Contract
2 INTERSECT
3 SELECT Cont_No FROM dbo.Contract_Payment
Yukarıdaki sorguyu çalıştırdığımızda ,Contract tablosundaki Cont_No kolonuyla Contract_Payment tablosundaki Cont_No kolonu içindeki verilerin aynı olanlarını bize listeleyecektir.
 
Gördüğünüz üzere iki tablo içinde aynı kolonlardaki aynı verileri bize Intersect komutu sayesinde listelemiş oldu.       Mustafa abi kulaklarını çınlatıyorum ama bu konu üzerinde konuşurken başka yollardan da yapılabilir demiştin ya ! Şimdi o yollardan bahsedelim biraz da; In veya exists operatörleri ile de aynı sonuca ulaşılabilir.
1 SELECT Cont_No
2 FROM dbo.Contract Where Cont_No IN (SELECT Cont_No FROMdbo.Contract_Payment)
1  
1 SELECT Cont_No
2 FROM dbo.Contract c WHERE EXISTS (SELECT TOP 1 1 FROMdbo.Contract_Payment cp WHERE C.Cont_No=CP.Cont_No)
 

EXCEPT Komutu

Except operatörü de iki farklı sorgu sonucunu karşılaştırırken Intersect operatöründen farklı olarak sadece ilk sonuç setinde olup ikinci sorgu sonucunda olmayan kayıtları listelememizi sağlamaktadır. Konuyu daha iyi anlamak için bir örnek yapalım. Syntax;
1 SELECT FROM b
2 EXCEPT
3 SELECT FROM b
şeklindedir.
1 SELECT Cont_No FROM dbo.Contract
2 EXCEPT
3 SELECT Cont_No FROM dbo.Contract_Payment
Yandaki sorguyu çalıştırdığımız da Contract tablosundaki Cont_No da olan ve Contract_Payment tablosunda olmayan verileri listeler.  Görüldüğü üzere Contracttablosundaki Cont_No field ındaki Deneme kaydı,Contract_Payment tablosunda olmadığından dolayı listeler. Bunların dışında aynı sonuca farklı yollardan ulaşabiliriz. En basit haliyle;
1 SELECT Cont_No
2 FROM dbo.Contract Where Cont_No NOT IN (SELECT Cont_No FROMdbo.Contract_Payment)
ya da
1 SELECT Cont_No
2 FROM dbo.Contract c WHERE NOT EXISTS (SELECT TOP 1 1 FROMdbo.Contract_Payment cp WHERE C.Cont_No=CP.Cont_No)
     

Saygılarımla

Yusuf KAHVECİ

Database Administrator

(İzin Alınmadığı Sürece Makalelerimin Yayınlanması Yasaktır! )