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
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.
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.
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
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
- 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.
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 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
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
Yorumlar
Yorum Gönder