Son Haberler
Anasayfa / Yazılım / SQL / LEFT OUTER JOIN Fonksiyonunun İkiden Fazla Tablo İçin Kullanımı

LEFT OUTER JOIN Fonksiyonunun İkiden Fazla Tablo İçin Kullanımı

Bir önceki yazımda LEFT OUTER JOIN ve RIGHT OUTER JOIN kullanımına değinmiştim. Ancak o yazımda daha çok iki tablo üzerinde işlem gerçekleştirmiştim. Peki ikiden fazla tablo üzerinde işlem yapmak istersek ne yapmamız gerek? Bu yazımda neler yapabileceğimize değinmek istiyorum.

Örneğin müşteri ID bilgilerinin olduğu bir müşteriler tablosu, sipariş ID bilgilerinin yer aldığı bir siparişler tablosu bir de ürün ID bilgilerinin yer aldığı bir ürünler tablosuna sahip olduğumuzu var sayalım. Şöyle bir sorgu yapmak istiyoruz diyelim. Herhangi bir ürünü alsın ya da almasın tüm müşteriler listelenecek, ürün alan müşterilerin de sipariş ID bilgileri ve aldıkları ürün ID bilgileri listelenmeli diyelim. İşte bu durumda biz OUTER JOIN kullanmalıyız ve ikiden fazla tablo üzerinde işlem yapmalıyız.

Şimdi aşağıdaki VENN şemasında gördüğümüz işlemi yapalım. (Renkli alanı listeleyeceğiz)

2013022001

Şekilden görüleceği üzere SalesOrderHeader tablosu ile SalesOrderDetail tablosunu SalesOrderID kolonu üzerinde bağlayacağım. Daha sonra buradan çıkan sonuçları da herhangi bir CustomerID ile eşleşsin ya da eşleşmesin Sales.Customer tablosu ile bağlayacağım.

İkiden fazla tablo üzerinde işlem OUTER JOIN yaparken syntax aşağıdaki gibidir :

SELECT listelenecek kolonlar FROM tablo1 LEFT OUTER JOIN tablo2 ON tablo1.kolon1 = tablo2.kolon2
LEFT OUTER JOIN tablo3 ON tablo2.kolon3 = tablo3.kolon4

Şimdi yukarında venn şeması ile ifade ettiğim kısmı T-SQL kodlarımıza dökelim.

SELECT Musteri.CustomerID, SOH.SalesOrderID, SOD.SalesOrderDetailID, SOD.ProductID
FROM Sales.Customer AS Musteri
LEFT OUTER JOIN Sales.SalesOrderHeader AS SOH ON Musteri.CustomerID = SOH.CustomerID
LEFT OUTER JOIN Sales.SalesOrderDetail AS SOD ON SOH.SalesOrderID = SOD.SalesOrderID
WHERE Musteri.CustomerID IN (1,2,11028,11029,11030)

Sorgumuzun sonucu aşağıdaki resimde görebilirsiniz.

2013022002

Bir örnek daha yapalım. Aşağıdaki venn şemasında gösterdiğim kısmı yapalım.

2013022003

Burada da Sales.SalesTerritory tablosunu TerritoryID alanı üzerinden Sales.Customer tablosuna bağlayacağım. O halde sorgumuz şöyle olur :

SELECT Musteri.CustomerID, SOH.SalesOrderID, SOD.SalesOrderDetailID, 
SOD.ProductID, Ulke.Name FROM Sales.Customer AS Musteri
LEFT OUTER JOIN Sales.SalesOrderHeader AS SOH ON Musteri.CustomerID = SOH.CustomerID
LEFT OUTER JOIN Sales.SalesOrderDetail AS SOD ON SOH.SalesOrderID = SOD.SalesOrderID
LEFT OUTER JOIN Sales.SalesTerritory AS Ulke ON Musteri.TerritoryID = Ulke.TerritoryID
WHERE Musteri.CustomerID IN (1,2,11028,11029,11030)

Sorgu sonucu :

2013022004

Bir sonraki yazıda görüşmek üzere..

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir