Mysql Join Kullanımı - Tablo Birleştirme

Mysql 07 Haziran 2021 - 01:41:19 338 Gösterim 0 Yorum

Sorgu optimizasyonu konusunda veritabanına gönderdiğiniz sorgu sayısı önemlidir. O nedenle bir içeriğin verilerini birden fazla tabloda tutuyorsanız, bunu birden fazla CRUD işlemleri ile çekmek yerine tek bir işlemde Veritabanı tablolarını birbirine bağlayarak çekebilirsiniz. INNER JOIN, LEFT JOIN ve RIGHT JOIN komutları işinizi kolaylaştırıp, kod kalabalığından sizi kurtarabilir. Ben birçok projemde sık sık veritabanı tablolarını daha düzenli oluşturmak açısından birbirine bağlı tablolar oluşturuyorum.

Bu nedenle bir verinin içeriği birkaç tabloya dağılmış olabiliyor. Bunun nedeni ise bazı verileri her yerde kullanmadığım, bazı verileri ise çok sık kullandığım için. Örneğin bir blog sisteminde başlık, konu içeriği gibi alanlar neredeyse her yerde kullanılırken, o blog yazısında sayfada gösterilen bileşen alanı sadece blog detay sayfasını ilgilendiriyor. Bu durumda ben bazı alanları post_yardimci isimli bir tabloda tutmayı daha uygun görüyorum.

Şimdi sırasıyla birleştirme işlemlerini yapalım. İlk olarak INNER JOIN'den başlayalım. Ben iki tane tablo örneği vereceğim.

img_id img_url
1 uploads/12.jpg
2 uploads/15.jpg

İlk tablomda resimleri veritabanında tutuyorum. Diğer tablo örneğimde ise Post başlığı, img ve Seo url alalım.

post_id post_title img post_seo
2 Merhaba Dünya 1 merhaba-dunya
3 Mysql Veritabanı null mysql-veritabani
4 Görsel Hafıza 2 gorsel-hafiza

Şimdi INNER JOIN kullanarak eşleşen verileri birleştirelim.

SELECT * FROM post INNER JOIN image ON post.img=image.img_id

Tablomuzun çıktısı;

 

post_id post_title img post_seo img_id img_url
2 Merhaba Dünya 1 merhaba-dunya 1 uploads/12.jpg
4 Görsel Hafıza 2 gorsel-hafiza 2 uploads/15.jpg

şeklinde olacak. Farkındaysanız 3 postumuz vardı ama yeni tabloda 2 tane postumuz oldu. Yani eşleşmeyen içerik ortadan kalktı. INNER JOIN sadece ilişkili verileri döndürecektir.

LEFT JOIN ise bir başka birleştirme yöntemidir. Burada ilk çağırdığımız tablonun tamamını alır, ardından birleştirmek için çağırdığımız tabloda ise ilişkili verileri döndürür. Tekrar yapalım.

SELECT * FROM post LEFT JOIN image ON post.img=image.img_id

çıktısı;

post_id post_title img post_seo img_id img_url
2 Merhaba Dünya 1 merhaba-dunya 1 uploads/12.jpg
3 Mysql Veritabanı null mysql-veritabani    
4 Görsel Hafıza 2 gorsel-hafiza 2 uploads/15.jpg

RIGHT JOIN ise LEFT join ile kullanım olarak aynı fakat bu sefer ilk cağırdığımız tablo yerine ikinci çağırdığımız tablodaki değerler tamamen döndürülür. İkinci tablodaki değerin karşılığı null da olsa ilk tabloda gözükecektir.

Yorum Yapılmamış

Bu yazıya henüz bir yorum yapılmamış, hemen bir tane yapmak ister misin ?

Yorum Yapın