10/13/2005

Inner Join ve Outer Join Farklari

Sanırım bu aralar en çok aldığım sorulardan biri de "INNER JOIN ve OUTER JOIN farkı nedir?" oldu. SQL Server da inner join ve outer join kullanımı ile ilgili ayrıntılı bi makale yazayım dedim.

Örnek olarak Müşteriler vede Siparişler olmak üzere iki adet relational(ilişkili) tablomuz bulunsun.

INNER JOIN Kullanımı:
Bize sadece herhangi bir siparişi bulunan müşterileri gösterecektir.
Ne Zaman Kullanmak isteyebiliriz?
Örneğin her müşteri tarafından yapılan sipariş miktarını görmek istediğinizde yada sadece sipariş vermiş olan müşterileri görmek istediğinizde vs...

Örnek:
Select Musteriler.*, Siparisler.*
FROM Musteriler INNER JOIN Siparisler ON Musteriler.MusteriID = Siparisler.MusteriID

OUTER JOIN Kullanımı:
Bize siparişi olsun olmasın bütün Siparişleri yada müşterileri görme imkanı sağlar.

a)Left Outer Join:
Aşşağıdaki şekilde kullanıldığında, LEFT OUTER JOİN kelimesinin solundaki Tablo(Müşteriler) belirleyici tablodur ve bu kullanım bir siparişi bulunsun bulunmasın bütün müşteriler listeleyecektir. Herhangi bir müşterinin eğer hiç siparişi bulunmuyorsa, sipariş bölümdeki veriler NULL olarak görünecektir.

Örnek:
SELECT Musteriler.*, Siparisler.*
FROM Musteriler LEFT OUTER JOIN Siparisler ON Musteriler.MusteriID = Siparisler.MusteriID

b)Right Outer Join:
Aşşağıdaki şekilde kullanıldığında, RIGHT OUTER JOİN kelimesinin sağındaki Tablo(Siparişler) belirleyici tablodur ve bu kullanım bir müşteriye ait olsun olmasın bütün siparişleri gösterecektir. Herhangi bir siparişin sahibi bir müşteri bulunmuyorsa, müşteriye ait bilgiler NULL olarak görüntülenecektir.

Örnek:
SELECT Musteriler.*, Siparisler.*
FROM Musteriler RIGHT OUTER JOIN Siparisler ON Musteriler.MusteriID = Siparisler.MusteriID

Özetlemek gerekirse, Inner JOIN sadece ve sadece iki tablodaki ilişiği bulunan satırları listelerken OUTER JOIN, sahibi bulunmayan satırları da listeleyecektir.