SQL JOIN Türleri: INNER, LEFT, RIGHT, FULL Karşılaştırması

# SQL JOIN Türleri: INNER, LEFT, RIGHT, FULL Karşılaştırması

İki veya daha fazla tabloyu birleştirmek SQL'de JOIN ile yapılır. Hangi satırların sonuçta yer alacağı JOIN türüne göre değişir. Gelin her birinin ne zaman kullanılacağını pratik örnekle görelim.

INNER JOIN, her iki tabloda da eşleşen satırları döndürür. Hiçbir tarafta eşleşmeyenler hariç tutulur.

Örnek senaryo: Müşteriler ve Siparişleri tablosu var. Sadece sipariş veren müşterileri görmek istiyorsun.

1SELECT musteri.ad, siparis.siparis_no
2FROM musteri
3INNER JOIN siparis ON musteri.id = siparis.musteri_id;

Çıktı:

1ad | siparis_no
2Ahmet | 101
3Ayşe | 102
4Mehmet | 103

Sipariş vermeyen müşteriler listede yoktur.

LEFT JOIN, sol tabledeki tüm satırları döndürür. Sağ tabloda eşleşme olmazsa NULL gösterir.

Aynı tabloları kullan, ama tüm müşterileri görmek istiyorsun (sipariş vermiş olsun ya da olmasın):

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1SELECT musteri.ad, siparis.siparis_no
2FROM musteri
3LEFT JOIN siparis ON musteri.id = siparis.musteri_id;

Çıktı:

1ad | siparis_no
2Ahmet | 101
3Ayşe | 102
4Mehmet | 103
5Fatma | NULL

Fatma sipariş vermese de listede yer alır.

RIGHT JOIN, sağ tabledeki tüm satırları tutar. Sol tabloda eşleşme yoksa NULL olur.

1SELECT musteri.ad, siparis.siparis_no
2FROM musteri
3RIGHT JOIN siparis ON musteri.id = siparis.musteri_id;

Tüm siparişler görünür; müşteri bilgisi eksikse NULL döner.

FULL JOIN (FULL OUTER JOIN), her iki tabledeki tüm satırları döndürür. Eşleşmeyenler NULL olur. Not: MySQL bunu doğrudan desteklemez; LEFT JOIN + RIGHT JOIN ile UNION kullan.

1SELECT musteri.ad, siparis.siparis_no
2FROM musteri
3LEFT JOIN siparis ON musteri.id = siparis.musteri_id
4UNION
5SELECT musteri.ad, siparis.siparis_no
6FROM musteri
7RIGHT JOIN siparis ON musteri.id = siparis.musteri_id;

- INNER: İki tabloda da var olanlar
- LEFT: Sol tabledeki hepsi + sağda eşleşenler
- RIGHT: Sağ tabledeki hepsi + solda eşleşenler
- FULL: Her iki tabledeki hepsi

Projeinde veri kaybı istemiyorsan LEFT/RIGHT; tam eşleşme lazımsa INNER kullan.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz