16 Ocak 2017 Pazartesi

JOIN Komutu



Şu ana kadar anlatmış olduğumuz sorgular sadece tek tablo kullanılarak gerçekleştirildi. Bazı durumlarda tek bir tablo ile çalışmak yeterli olmayacaktır.
Böyle bir durumda birleştirme/eşleştirme adını verdiğimiz bir yapı kullanılmak zorundadır. Bu işlemin gerçekleştirilmesi için JOIN komutu kullanılmaktadır.

JOIN işlemini anlatmak için "kategoriler" ve "urunler" tablolarını göz önüne alalım. Bu tablolarda yer alan kayıtlar aşağıda görüldüğü şekildedir.



Dikkat edilirse, "kategoriler" tablosunda ilgili ürünün bir kategori numarası ve ait olduğu kategori adı bulunmaktadır.

Bir ürüne ilişkin detaylar bu tabloda verilmemiş olup, gerekli diğer detaylar "urunler" tablosunda verilmiştir. Bu iki tablo birbirlerine 'kategoriID' ile bağlıdır.



Şimdi bu iki tabloyu kullanarak iki tablo arasındaki bağlantıyı da gösteren SQL ifadesini şöyle yazabiliriz.

    SELECT K.kategoriID, K.kategoriAdi, U.urunAd
          FROM kategoriler K, urunler U 
                WHERE K.kategoriID = U.kategoriID


SELECT K.kategoriID, K.kategoriAdi,U.urunAd
          FROM kategoriler K, urunler U 
                WHERE  K.kategoriID = U.kategoriID

Bu SQL cümlesinde tablolara bir takma ad verilmiştir.

Buradaki “WHERE  K.kategoriID = U.kategoriID”     cümlesi ile bir birleştirme işlemi gerçekleştirilmiştir. Yani "kategoriler" tablosundaki 'kategoriID' ile "urunler" tablosundaki 'kategoriID' eşit ise kayıtlar listelenecektir.




SELECT K.kategoriID, K.kategoriAdi, U.urunAd
          FROM kategoriler K, urunler U 
                WHERE  K.kategoriID = U.kategoriID
 


Bu işlemi INNER JOIN komutu ile gerçekleştirmek istersek SQL cümlemiz aşağıdaki gibi olacaktır.
    SELECT urunAd, kategoriAdi
         FROM kategoriler
               INNER JOIN urunler
                     ON kategoriler.kategoriID = urunler.kategoriID

Burada INNER JOIN ifadesi her iki tabloda da ortak olan değerlere bakarak eşit olanları ekrana listeleyecektir.


INNER JOIN işlemi her türlü FROM yan cümlesi ile kullanılabilir. En sık kullanılan birleştirme türüdür.
Her iki tabloda eşleşen değerler var ise birleştirme işlemi gerçekleştirilir ve kayıtlar ekrana listelenir.


INNER JOIN işlemini daha iyi anlatabilmek için daha karmaşık bir örnek yapalım. Aşağıdaki ilişkiyi göz önüne alalım.


Dikkat edilirse, birden fazla tablo birbirlerine farklı anahtarlar kullanılarak bağlanmış durumdadırlar. INNER JOIN komutu bu tablolarda ortak olan değerler kullanılarak birleştirme işlemini çok kolay bir şekilde yerine getirmektedir.
Bu dört tablonun INNER JOIN komutu kullanılarak yazılan SQL cümlesi şöyle olacaktır:

    SELECT * FROM (kategoriler INNER JOIN urunler  ON kategoriler.kategoriID = urunler.kategoriID) INNER JOIN (siparisler INNER JOIN siparisDetay ON siparisler.siparisID = siparisDetay.siparisID) ON urunler.urunID = siparisDetay.urunID



Aşağıdaki söz dizimi kullanılarak INNER JOIN ifadesi içerisinde ON yan cümleleri de yazabilirsiniz.

SELECT alanlar
FROM tablo1 INNER JOIN tablo2
ON tablo1.alan1 karşılaştırma tablo2.alan1 AND
ON tablo1.alan2 karşılaştırma tablo2.alan2) OR
ON tablo1.alan3 karşılaştırma tablo2.alan3)