SQL JOIN nedir? İki tabloyu birleştirmenin Türkçe rehberi
Okumak yerine yazarak öğren: tarayıcıda pratik yap → · mülakata ne kadar hazırsın?
JOIN, iki tabloyu ortak bir sütun üzerinden yan yana getirir. Müşteriler bir tabloda, siparişler başka tabloda durur; "hangi müşteri ne sipariş verdi?" sorusunun cevabı JOIN'dir. İki temel tür her şeyi belirler: INNER JOIN yalnızca eşleşen satırları döndürür, LEFT JOIN sol tablonun tamamını korur. Bu yazıdaki her sorgu, SQL Quest'in gerçek verisinde çalıştırıldı — satır sayıları uydurma değil.
Neden JOIN? Veri neden iki tabloda?
Müşteri adını her sipariş satırına kopyalasaydık, müşteri e-postasını değiştirmek 40 satırı düzeltmek demek olurdu. Bu yüzden ilişkisel veritabanı böler: customers (16 satır) müşteriyi bir kez tutar, orders (40 satır) yalnızca customer_id ile ona işaret eder. JOIN, bu işareti takip edip tabloları yeniden birleştirir:
SELECT c.name, o.product, o.total
FROM customers c
INNER JOIN orders o ON o.customer_id = c.customer_id;ON satırı köprüdür: "orders'taki customer_id, customers'taki customer_id'ye eşitse bu satırlar birbirine ait." Sonuç: 40 satır — her sipariş, sahibinin adıyla yan yana.
LEFT JOIN nedir?
LEFT JOIN, sol tablonun her satırını sonuçta tutar ve sağ tablodan eşleşen varsa onu ekler; eşleşme yoksa sağ tarafın sütunlarını NULL ile doldurur. Tek cümlelik kuralı budur.
Pratikte önemi şu: INNER JOIN "iki tarafta da karşılığı olan" satırları verir, LEFT JOIN ise "soldakilerin hepsi, sağdan bulabildiğin kadarı". Müşteri listesi, ürün kataloğu, personel tablosu — soldaki liste eksilmemeliyse LEFT JOIN kullanırsın. SQL joinler arasında raporlamada en sık gerekeni de odur.
Aşağıdaki bölüm bunu 16 müşterilik gerçek bir tabloda gösteriyor: aynı sorgu INNER ile 40, LEFT ile 46 satır döndürüyor.
INNER ile LEFT'in farkı: kaybolan 6 müşteri
16 müşterinin 6'sı hiç sipariş vermemiş. INNER JOIN'de bu 6 kişi sonuçta hiç görünmez — eşleşme yoksa satır da yok. Aynı sorguyu LEFT JOIN ile yazınca:
SELECT c.name, o.product, o.total
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.customer_id;| name | product | total |
|---|---|---|
| Amy Taylor | NULL | NULL |
| John Smith | Laptop Pro | 1299.99 |
| John Smith | USB-C Hub | 79.99 |
| Nina Patel | NULL | NULL |
Amy Taylor sipariş vermemiş ama satırı duruyor; sipariş sütunları NULL ile dolduruldu. Kural bu kadar: "eşleşmeyen sol satır da cevabımın parçası mı?" Evetse LEFT, hayırsa INNER. (Rapor ve panolar çoğunlukla LEFT ister — müşteri listesi, detay eksik diye kısalmamalı.)
Türkçe kaynaklarda az anlatılan tuzak: WHERE vs ON
-- YANLIŞ: WHERE sağ tabloyu filtreleyince LEFT JOIN bozulur → 37 satır
SELECT c.name, o.total
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.customer_id
WHERE o.status = 'completed';
-- DOĞRU: koşul ON'a taşınır → 43 satır, 6 müşteri korunur
SELECT c.name, o.total
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.customer_id
AND o.status = 'completed';Neden: siparişsiz müşterilerde o.status NULL'dır ve NULL = 'completed' asla doğru olmaz — WHERE o 6 satırı sessizce çöpe atar. LEFT JOIN yazdın, INNER JOIN aldın. Kural: LEFT JOIN'de sağ tablonun koşulu ON'a, sol tablonun koşulu WHERE'e.
Bonus: hiç sipariş vermeyenleri bulmak (anti-join)
SELECT c.name, c.membership
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.customer_id
WHERE o.order_id IS NULL;Pazarlamanın en sevdiği sorgu: "kayıtlı ama hiç almamış" listesi. LEFT JOIN herkesi tutar, IS NULL eşleşmeyenleri seçer. Mülakatlarda da klasik — İngilizcesi "anti-join".
▶ Şimdi kendin yaz: LEFT JOIN — NULL'ların Belirişini İzle
Sık sorulanlar
LEFT JOIN nedir, ne zaman kullanılır?
LEFT JOIN sol tablonun tüm satırlarını korur, sağdan eşleşme bulamazsa o sütunları NULL bırakır. "Listem eksilmesin, detay varsa gelsin" dediğin her yerde — müşteri raporu, panolar, kapsama kontrolü — doğru seçim odur. Yukarıdaki bölümde 16 müşteri üzerinde satır satır görebilirsin.
RIGHT JOIN ve FULL JOIN ne işe yarar?
A RIGHT JOIN B, tabloların yeri değişmiş B LEFT JOIN A'dır — çoğu ekip yalnızca LEFT kullanır. FULL OUTER JOIN iki tarafın da eşleşmeyenlerini tutar; iki sistemi karşılaştırırken ("kim kimde eksik?") işe yarar.
LEFT OUTER JOIN farklı bir şey mi?
Hayır — LEFT JOIN ile LEFT OUTER JOIN aynıdır; OUTER kelimesi süstür. Her motorda böyle.
Uygulama Türkçe biliyor mu?
Evet — SQL Quest'in soruları Türkçe açıklamalarla gelir ve AI koç Türkçe yazarsan Türkçe cevap verir. Türkçe SQL öğrenme sayfasından da başlayabilirsin.
JOIN'i okudun. Şimdi yaz.
Her soru tarayıcında gerçek tablolara karşı çalışır. Koç, "yanlış" demek yerine hangi satırları neden kaybettiğini anlatır — Türkçe sorarsan Türkçe.
Tek soruyla başla: LEFT JOIN — NULL'ların Belirişini İzle →