by Emre ARITÜRK
16. Temmuz 2011 09:41
Merhaba Arkadaşlar,
Bir süredir yazmaya vakit bulamadığım makaleler ile geri dönmüş bulunmaktayım.
Bu gün sizlere iki tablonun sahip olduğu aynı kolonlar arasındaki ortak ve farklı kayıtları listeleyebileceğiniz fonksiyonları anlatmaya çalışacağım.
Öncelikle 2 adet tabloya ihtiyacımız olacak. Bunlar aynı yapılarda olmasına gerek olmayan,ancak bu fonksiyonları denemek için aynı isimli birkaç alana ihtiyaç duyacağımız kolonlardır.
Aşağıdaki 2 tabloyu oluşturalım ve sırasıyla CustTable1 ve CustTable2 isimlerini verelim:
Daha sonra bu tablolara çeşitli kayıtlar girelim :
Evet kayıtlarımızı girdik ve listeledik. Şimdi gelelim esas konumuza.
İki tablonun (select esnasında vermiş olduğunuz kolonlar arasındaki) kesişen kayıtları için INTERSECT, farklı kayıtları için EXCEPT komutlarını kullanabilirsiniz. Her iki komut ta UNION ailesinden komutlar olup 2 adet SELECT Cümlesi arasına yazılıyor. Burada bu iki komutunda çalışma şekli ilk select cümlesi üzerinden çalışmaktadır. Yani INTERSECT ile iki select arasındaki ortak kayıtları almak istediğinizde SQL, ilk select ile gelen kayıtlar için ikincici select e bakar ve orada olanları getirir. Yani işin özü olarak bu iki komutta referans olarak ilk select ifadenizi alır.
EXCEPT komutunda ise ilk ikinci select te olmayıp birinci select içinde olan kayıtları getirir. Yani SQL üzerinde ilk olarak INTERSECT i gösterirsek :

Görüldüğü gibi bize her iki tabloda da ortak olan ve select ifadesinde görmek istediğimiz kolonlar olan Ad,Soyad bilgilerini getirdi.
Kesişim ifadesinde (INTERSECT) aslında ilk select veya ikinci select ifadesinin sırası çok önemli değildir. Ancak fark (EXCEPT) ifadesinde sıra önemlidir:

Bu resimdeki sorguda referans sorgumuz CustTable1 üzerinden geçti bu tabloda olup diğer tabloda olmayanları listeledi.Sorgularımızın sırasını değiştirirsek:

Gördüğünüz gibi referans sorgumuzu değiştirdiğimizde bu sefer CustTable2 de olup 1 de olmayan kayıtları listedeli.
Bir sonraki yazıda görüşmek üzere.