SQL - Join ve Join Türleri

SQL'de Joinler ilişkisel veri tabanında yaygın olarak kullanılmakta olup, iki veya daha fazla tablodaki ortak alanlar üzerinden birleştirme işlemi yapar.

Web uygulaması geliştirirken iki tablodan verileri detay sayfasında göstermek istersek Join yapısını kullanabiliriz.

Raporlama yaparken de iki tablodaki bilgileri tek bir tabloda toplamak amacıyla da kullanabiliriz.

Joinleri anlayabilmek adına kümelerdeki kesişim birleşim ve fark işlemlerini anlamamız bize yardımcı olacaktır.

Join Türleri 

  • Inner Join (tabloA ∩ tabloB)


Inner Join iki tabloda bulunan ortak kolon sayesinde iki tabloya ait verilerin kesişimini döndürür.Yani iki tabloda da bulunan verileri döndürür.


tbl_Kitap ve tbl_KitapTür tablolarımız üzerinden join örneklerini yapacağız.

SELECT * FROM tbl_Kitap 
INNER JOIN tbl_Kitap_Tür
ON tbl_Kitap.KitapID=tbl_Kitap_Tür.KitapID

Sorgumuzun sonucu

8 satırlık dönen sonuç iki tabloda da bulunan verilerdir. KitapID bizim birleştirici kolonumuzdur.
Sorgumuzda INNER JOIN yerine JOIN de yazabiliriz.Default olrak INNER JOIN yapar.

  • Left Join  (tableA/tableB U tableA∩tableB)
Left Join ile ilk(left) yazdığımız tablonun tüm alanlarını getirirken ikinci yazdığımız tablodan da eşleşen kısımlarını getirir. Sorgu sonucunda eşleşemeyen kısımlarda Null değerler oluşur.

SELECT * from tbl_Kitap as a 
LEFT JOIN tbl_Kitap_Tür as b --SOLDAKİ TÜM ALANLARI GETİRİYOR SAĞDAKİNİN EŞLENİĞİNİ GETİRDİ 
ON a.KitapID=b.KitapID 

Sorgumuzun Sonucu

  • Right Join (tableB/tableA U tableA∩tableB)
Right Join ise Left Join'in tersidir. ikinci(right) tablodaki tüm alanları getirirken ilk yazdığımız tablodan da eşleşen kısımları getirir. Sorgu sonucunda eşleşemeyen kısımlarda Null değerler oluşur.

SELECT * from tbl_Kitap as a 
RIGHT JOIN tbl_Kitap_Tür as b--SAĞDAKİ TÜM ALANLARI GETİRİYOR SOLDAKİNİN EŞLENİĞİNİ GETİRDİ 
ON a.KitapID=b.KitapID 

                                                              Sorgumuzun Sonucu                               


Left/Right mantığı iki tablo arasına LEFT yazarsak ilk tabloyu sol tablo kabul eder ve birleştirmeyi bu tabloya göre yapar. RIGHT yazarsak ilk tabloyu sağ kabul eder ve birleştirmeyi bu tabloya göre yapar.

LEFT JOIN yazılıyken RIGHT join yapacaksak, sorgu sırasında tablo adlarının yerini değiştirebiliriz.Sonuç olarak ikinci tabloyu sol, ilk tabloyu sağ kabul eder.

SELECT * from tableA as a --ilk tablo
LEFT JOIN tableB  as b  --ikinci tablo
ON a.tableA =b.tableB  

SELECT * from tableB as a  --ikinci tablo
LEFT JOIN tableA as b  --ilk tablo
ON a.tableB =b.tableA 
  • Cross Join  tableA X tableB
Cross Join, iki tablo ile oluşabilecek tüm kombinasyonları döndürür. Yani kartezyen çarpımı yapar. Dönecek veri sayısı ilk tablonun eleman sayısı ile ikinci tablonun eleman sayısının çarpımı kadardır.

SELECT * from tbl_Kitap as a 
CROSS JOIN tbl_Kitap_Tür as b 
  • Full Join  (tableA U tableB)
Full Join, iki tablodaki tüm verileri getirir. Kesişme olsun olmasın bu kayıtlar gelir bu yüzden sonuç kümesinde null değerler olabilir.

SELECT * from tbl_Kitap_Tür as a 
FULL JOIN tbl_Kitap as b 
ON a.KitapID=b.KitapID 

Sorgumuzun Sonucu

Sorguda ilk olarak tbl_Kitap_Tür tablosunu yazdığımız için ilk önce o tablonun verilerini yazdırdı. tbl_Kitap ile kesişenler listelenirken eşleşmeyenler de null olarak atandı. Eşleşme olsun olmasın bütün veriler listelendi.

Yorumlar