Anasayfa / Yazılım / SQL / INNER JOIN ile 3 ve Daha Fazla Tabloyu Birleştirme

INNER JOIN ile 3 ve Daha Fazla Tabloyu Birleştirme

Bundan daha önceki INNER JOIN ile alakalı yazılarımda iki tablo üzerinde işlem gerçekleştirdim. Ama biz yazılım geliştiriciler daha çok tablo üzerinde sorgu yapma ihtiyacı duyabiliriz. Özellikle çoka çok ilişkilerde daha fazla tabloyu birleştirerek sorgulama yapma ihityacı sıklıkla rastlanılan bir durumdur. Örneğin bir okulun veritabanında öğrencilerin bilgilerinin tutulduğu bir tablo, birde ders bilgilerinin yer aldığı bir tablo olsun. Burada şuna ihtiyaç duyabilirsiniz, üçüncü bir tabloda da hangi öğrenci hangi dersleri alıyor?

Yine adventureworks veritabanına dönelim ve bu veritabanı üzerinde sipariş tarihine göre yapılan her sipariş için ürün listesini görmek istediğimizi varsayalım. Burada Sipariş tarihi bilgisi yani OrderDate Sales.SalesOrderHeader tablosunda, sipariş bilgisi Sales.SalesOrderDetail tablosunda ve ürün bilgisi Production.Product tablosunda yer almakta.Yani bu işlem için bu 3 tabloyu birbirine bağlamam gerekiyor başka bir deyişle bu tabloları birleştirmem gerekiyor. Bunu resmedersek;

2013021801

İkiden fazla tablo birleştiriminde syntax aşağıdaki gibidir:

SELECT listelenmesini istediğimiz kolonlar FROM tablo1Adı
INNER JOIN tablo2Adı ON tablo1.kolon1 = tablo2.kolon2
INNER JOIN tablo3Adı ON tablo2.kolon2 = tablo3.kolon3

Daha fazla tablo eklemek istediğimiz de de tekrar INNER JOIN satırı ilave edip diğer tabloları belirtiriz.

Şimdi sorgumuzu oluşturalım.

SELECT soh.SalesOrderID, soh.OrderDate, p.ProductID, p.Name
FROM Sales.SalesOrderHeader AS soh
INNER JOIN Sales.SalesOrderDetail AS sod
ON soh.SalesOrderID = sod.SalesOrderID
INNER JOIN Production.Product AS p 
ON sod.ProductID = p.ProductID
ORDER BY soh.SalesOrderID

Böylelikle sorgumu oluşturdum. Sonucu aşağıdaki gibi :

2013021802

Sorgumuzu açıklayayım, öncelikle Sales.SalesOrderHeader tablosu ile Sales.SalesOrderDetail tablosunu SalesOrderID kolonu üzerinde birleştiriyoruz. Daha sonra bu birleşimin ardından Sales.SalesOrderDetail tablosu ile Production.Product tablosu üzerindeki ProductID kolonunu birleştiriyoruz.

INNER JOIN ile bir kaç uygulama daha yapıp yazıyı bitirelim.

1) HumanResources.Employee tablosunda çalışan isimleri yer almıyor. Bu tablo ile Person.Person tablosundaki BusinessEntityID kolonunu birleştirerek job title, birth date, first name ve last name alanlarını listeleyelim.

SELECT JobTitle, BirthDate, FirstName, LastName
FROM HumanResources.Employee AS Calisan
INNER JOIN Person.Person AS Kisi
ON Calisan.BusinessEntityID = Kisi.BusinessEntityID

2013021803

2) Müşteri isimleri Person.Person tablosunda yer almaktadır. Sales.Customer tablosu ile Person.Person tablosunu birleştirelim. Bu tablolardaki Person.Person tablosunda yer alan BusinessEntityID kolonu ile Sales.Customer tablosunda yer alan PersonID kolonu eşleşmekte bu birleştirmeyi buna göre yapacağız. Listelemek istediğim kolonlar ise FirstName, LastName, MiddleName, CustomerID, StoreID ve TerritoryID.

SELECT CustomerID, StoreID, TerritoryID, 
FirstName, MiddleName, LastName
FROM Sales.Customer AS Musteri
INNER JOIN Person.Person AS Kisi
ON Musteri.PersonID = Kisi.BusinessEntityID

2013021804

3) iki numaralı maddede yer alanlara ilaveten Sales.SalesOrderHeader tablosu ile Sales.Customer tablosundaki CustomerID kolonunu da birleştirelim.

SELECT Musteri.CustomerID, StoreID, Musteri.TerritoryID, 
FirstName, MiddleName, LastName, SalesOrderID
FROM Sales.Customer AS Musteri
INNER JOIN Person.Person AS Kisi
ON Musteri.PersonID = Kisi.BusinessEntityID
INNER JOIN Sales.SalesOrderHeader AS Satis
ON Satis.CustomerID = Musteri.CustomerID

2013021805

4) Sales.SalesOrderHeader tablosu ile Sales.SalesPerson tablosunu birleştirelim. Yapacağımız işlem, Sales.SalesPerson tablosundaki BusinessEntityID kolonu ile Sales.SalesOrderHeader tablosundaki SalesPersonID kolonlarını birleştirmek. Listeleyeceğimiz kolonlar : SalesOrderID, SalesQuota ve Bonus.

SELECT SalesOrderID, SalesQuota, Bonus FROM Sales.SalesOrderHeader AS Satis
INNER JOIN Sales.SalesPerson AS SatisElemani 
ON Satis.SalesPersonID = SatisElemani.BusinessEntityID

2013021806

5) Dört numarada yaptığımız sorguya ek işlem katalım. Person.Person tablosundaki FirstName, MiddleName, LastName alanlarınında listelenmesini sağlayalım.

SELECT SalesOrderID, SalesQuota, Bonus, FirstName, MiddleName, LastName
FROM Sales.SalesOrderHeader AS Satis
INNER JOIN Sales.SalesPerson AS SatisElemani 
ON Satis.SalesPersonID = SatisElemani.BusinessEntityID
INNER JOIN Person.Person AS Kisi
ON SatisElemani.BusinessEntityID = Kisi.BusinessEntityID

2013021807

6) Production.ProductModel tablosunda her ürün için yer alan katalog özelliklerini (renk, boy, açıklama) gibi özellikleri listeleyelim. Şimdi bunu yapabilmek için Production.ProductModel ve Product.Product tabloları arasında bir bağlantı yapmam gerekiyor.

SELECT UrunModel.CatalogDescription, Color, Size FROM Production.Product AS Urun
INNER JOIN Production.ProductModel AS UrunModel 
ON Urun.ProductModelID = UrunModel.ProductModelID

2013021808

7) Şimdi de veritabanı üzerinde satın alınan ürünlerin hangi müşteri tarafından alındığını listeleyelim.

SELECT FirstName, MiddleName, LastName, Urun.Name FROM Sales.Customer AS Musteri
INNER JOIN Person.Person AS Kisi ON Musteri.PersonID = Kisi.BusinessEntityID
INNER JOIN Sales.SalesOrderHeader AS SOH ON Musteri.CustomerID = SOH.CustomerID
INNER JOIN Sales.SalesOrderDetail AS SOD ON SOH.SalesOrderID = SOD.SalesOrderID
INNER JOIN Production.Product AS Urun ON SOD.ProductID = Urun.ProductID

2013021809

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

Bir yorum

  1. Güzel Anlatım,Teşekkürler

Bir cevap yazın

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