11. Join komutu

Join yapısı bize sql’de birbiriyle ilişkili tabloları ilişkisi üzerinden birleştirerek tek bir tablo halinde sunmayı sağlar ve SQL’de önemli bir yer tutar. Join komutunu kullanırken tablo diagramı üzerinden gitmek daha sağlıklı olacaktır.

İki tabloyu birbiriyle ilişkili bir şekilde sunabilmek için tablolar arasında primary-foreing key ilişkisi olması gerekir.

aşağıdaki  sorgu iki tabloyu birleştirir. Ancak sakıncalı bir yöntemdir çünkü iki tabloyu sadece yan yana getirir.

select * from OrderDetails, Product

aşağıdaki sorgu tabloları product ID’leri eşleyerek ekrana getirir ki bu bir önceki sorguya göre daha sağlıklıdır.

select * from OrderDetails,Product where OrderDetails.ProductId = Products.ProductId

Esas olayımız olan join… tabloları birleştirmek için en sağlıklı yol , şimdi aşağıdaki sorgudaki mantıktan biraz bahsedelim. Select * from … u zaten biliyoruz tabloyu getir demek. Peki hangi tablo ? OrdersDetails join Products yani orderDetails’a product tablosunun join edilmiş yani katılmış olan halini. Peki ya bu tablolar birleştirilirken hangi ilişki üzerinden birleştirilecekler ? on OrderDetails.ProductID = Products.ProductID yani bu ID’ler eşlenerek tablo birleştirelecek.

select * from OrdersDetaıls join Products on OrderDetails.ProductID = Products.ProductId

Eğer birbiriyle ilişkili olan 3 tabloyu birleştirmek istiyorsak.. yukarıdaki tabloda yaptığımız olay 2 tabloyu birleştirmekti. Buna 3. tabloyu ilave etmek istiyorsak kaldıgımız yerden devam edicez. Yukarıdaki tablodan elde ettiğimiz sonuca bir de Categories tablosunu join et. Bunu da hangi relation üzerinden yap? Products.CategoryID = Categories.CategoryID

select * from OrdersDetaıls join Products on OrderDetails.ProductID = Products.ProductId join Categories on Products.CategoryID = Categories.CategoryID

Tabloları birleştirdikten sonra üzerinde koşul işlemleri de uygulayabiliriz ancak aşağıdaki sorgu hata verecektir çünkü ProductID kolonu kullandığımız birkaç tabloda aynı isimle bulunduğundan karışıklık oluşmakta. Bunu önlemek için başına hangi tablonun kolonu olduğunu eklememiz yeterli olacaktırç

select * from OrdersDetaıls join Products on OrderDetails.ProductID = Products.ProductId join Categories on Products.CategoryID = Categories.CategoryID where ProductID = 5    --> hata
select * from OrdersDetaıls join Products on OrderDetails.ProductID = Products.ProductId join Categories on Products.CategoryID = Categories.CategoryID where Product.ProductID = 5