İçerikler
🗺️ Haritam
☕ Destek OlGiriş YapKayıt Ol
← İçerikler
İNTERAKTİF

SQL JOIN Türleri:
Görerek Öğren

INNER, LEFT, RIGHT, FULL OUTER ve CROSS JOIN — her tablo satırının nereye gittiğini, hangi satırların NULL döndüğünü renklerle izle. JOIN tipi değiştikçe sonuç tablosu anında güncelleniyor.

📋 Örnek Veritabanı
musteriler (5 satır)
idisimşehir
1Ali Yılmazİstanbul
2Ayşe KayaAnkara
3Mehmet Demirİzmir
4Fatma ÇelikBursa
5Can ArslanAntalya
siparisler (6 satır)
sipariş_idmüşteri_idürüntutar
1011Laptop25.000
1022Telefon18.000
1031Kulaklık3.500
1043Tablet12.000
1056Klavye2.000
1062Mouse1.500
🔑 musteriler.id = birincil anahtar🔗 siparisler.musteri_id = yabancı anahtar⚠ sipariş_id=105 — musteri_id=6 yok! (tutarsız veri)
MS
🔵 INNER JOIN
Her iki tabloda da eşleşen satırları getirir. Eşleşme yoksa satır sonuca dahil edilmez.
5 satır sonuç5 × 6 max
← Sol Tablo: musteriler
idisimşehir
1Ali Yılmazİstanbul
2Ayşe KayaAnkara
3Mehmet Demirİzmir
4Fatma ÇelikBursa
5Can ArslanAntalya
Sağ Tablo: siparisler →
sip.idmüş.idürüntutar
1011Laptop25.000
1022Telefon18.000
1031Kulaklık3.500
1043Tablet12.000
1056Klavye2.000
1062Mouse1.500
Sonuç: 5 satır
idisimşehirsipariş_idmüşteri_idürüntutar
1Ali Yılmazİstanbul1011Laptop₺25.000
1Ali Yılmazİstanbul1031Kulaklık₺3.500
2Ayşe KayaAnkara1022Telefon₺18.000
2Ayşe KayaAnkara1062Mouse₺1.500
3Mehmet Demirİzmir1043Tablet₺12.000
💻 SQL Sorgusu
SELECT m.id, m.isim, m.sehir,
       s.siparis_id, s.urun, s.tutar
FROM musteriler m
INNER JOIN siparisler s
  ON m.id = s.musteri_id;
✓ Ne zaman kullanılır?
Yalnızca her iki tabloda da karşılığı olan kayıtlar gerektiğinde. Örn: sipariş vermiş müşterileri listele.
⚠ Dikkat
En az bir tarafta eşleşme yoksa o satır kaybolur — veri kaybı yaşanabilir.
📊 Satır Sayısı Karşılaştırması
🔵 INNER JOIN
5 satır
⬅️ LEFT JOIN
7 satır
➡️ RIGHT JOIN
6 satır
🔄 FULL OUTER JOIN
8 satır
✖️ CROSS JOIN
30 satır
📚 Teknik Detaylar
ON koşulu nasıl çalışır? +

ON m.id = s.musteri_id ifadesi veritabanına "bu iki kolonu karşılaştır, eşit olanları eşleştir" der. Eşitlik kontrolü zorunlu değil — ON m.id < s.musteri_id gibi aralık koşulları da yazılabilir (çok nadir).

WHERE vs JOIN — fark ne? +

JOIN, tabloları mantıksal olarak birleştirir. WHERE, bu birleşimden satır filtreler. LEFT JOIN yapıp WHERE s.id IS NOT NULL yazarsan sonuç INNER JOIN'e eşdeğer olur — ama bu anti-pattern, kafa karıştırır.

Birden fazla JOIN zinciri nasıl yazılır? +

FROM a JOIN b ON a.id=b.a_id JOIN c ON b.id=c.b_id şeklinde zincirlenir. Veritabanı optimizer sırayı kendisi belirler. İndeks yoksa büyük tablolarda yavaşlar.

Aynı tabloyu JOIN'leyebilir miyim? (Self JOIN) +

Evet! Örn: çalışan-yönetici ilişkisi tek tabloda tutuluyorsa FROM calisanlar c JOIN calisanlar m ON c.yonetici_id = m.id yazılır. Alias (c, m) zorunludur.

NULL olan satırları nasıl filtrelerim? +

LEFT JOIN yapıp yalnızca eşleşmeyenleri görmek için WHERE s.siparis_id IS NULL ekle. "Hiç sipariş vermemiş müşteriler" sorgusu bu şekilde yazılır. NULL = NULL FALSE döner, IS NULL kullanmak zorundasın.

🗂 JOIN Hızlı Referans
JOIN TürüSol TabloSağ TabloSatır Sayısı
🔵 INNER JOINSadece eşleşenlerSadece eşleşenlern ≤ min(sol,sağ) ... sol×sağ
⬅️ LEFT JOINTümüEşleşenler + NULLn ≥ sol satır
➡️ RIGHT JOINEşleşenler + NULLTümün ≥ sağ satır
FULL OUTERTümüTümün ≥ max(sol,sağ)
✖️ CROSS JOINTümüTümün = sol × sağ
Bu içerik: