SQL JOIN nedir? İki tabloyu birleştirmenin Türkçe rehberi

2 Ağustos 2026·7 dk okuma·Her sorgu tarayıcında çalışır

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:

En temel JOIN — hangi müşteri ne aldı?
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.

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:

LEFT JOIN — 46 satır: 40 eşleşme + 6 NULL dolgulu müşteri
SELECT c.name, o.product, o.total
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.customer_id;
nameproducttotal
Amy TaylorNULLNULL
John SmithLaptop Pro1299.99
John SmithUSB-C Hub79.99
Nina PatelNULLNULL

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

Aynı niyet, bir kelime fark — 37'ye karşı 43 satır
-- 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)

NULL dolgusunu ipucu olarak kullan — 6 satır
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".

▶ Pratik: LEFT JOIN — NULL'ların Belirişini İzle

Sık sorulanlar

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.

JOIN Pratiği — Ücretsiz →