LEFT JOIN ve Eşleşmeyen Satırları Koruma
LEFT JOIN'in neleri koruduğunu ve eşleşmeyen satırlarda NULL değerlerin nasıl göründüğünü öğrenin.
LEFT JOIN ve Eşleşmeyen Satırları Koruma, CoddyKit'te ücretsiz bir SQL Interview Prep dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, SQL Interview Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Interview Prep kursu toplamda 4 dersten oluşur.
Mülakat Senaryosu
Mülakat yapan kişi şöyle der: "Hiç sipariş vermemiş müşteriler de dahil olmak üzere her müşteriyi ve siparişlerini listeleyin." Bir INNER JOIN siparişi olmayan müşterileri eler; bu nedenle gereksinimi karşılamaz. Bu iş için LEFT JOIN kullanılır.
Bir LEFT JOIN, sol taraftaki (ilk adı geçen) tablodaki her satırı korur ve sağ tablodan eşleşen satırları, varsa, ona ekler. Bu derste, mülakat yapanların beklediği kesin zihinsel model oluşturulur.
LEFT JOIN İşleminin Garantisi
Temel vaat şudur: sol tablodaki her satır, eşleşsin veya eşleşmesin, çıktıda en az bir kez görünür.
- Sol taraftaki bir satır sağ tarafta eşleşmeler bulursa, her eşleşme için bir çıktı satırı elde edersiniz.
- Sol taraftaki bir satır hiçbir eşleşme bulamazsa yine bir çıktı satırı elde edersiniz; sağ tablonun tüm sütunları
NULLolur.
Mülakat yapanların buna dış JOIN demesinin nedeni budur: eşleşme kümesinin dışında kalan satırlar atılmak yerine korunur.
İki Tablo
Bu ders boyunca iki basit tablo kullanacağız. customers tüm müşterileri içerir; orders satın alımları kaydeder ve bir müşteriye customer_id aracılığıyla başvurur.
Müşteri 3'ün (Carol) orders tablosunda hiçbir satırı olmadığını fark edin. Eşleşmeyen bu müşteri, LEFT JOIN işleminin tam olarak koruması gereken kayıttır.
-- customers
-- id | name
-- 1 | Alice
-- 2 | Bob
-- 3 | Carol
-- orders
-- id | customer_id | amount
-- 10 | 1 | 50
-- 11 | 1 | 75
-- 12 | 2 | 20LEFT JOIN İşlemini Yazma
Sözdizimi bir iç JOIN işlemini andırır; INNER yerine LEFT yazılır (OUTER sözcüğü isteğe bağlıdır: LEFT JOIN ve LEFT OUTER JOIN birbirinin aynısıdır).
Anahtar sözcükten önce yazılan tablo, korunan sol taraftır. Sıra önemlidir: customers LEFT JOIN orders tüm müşterileri korur, tüm siparişleri değil.
SELECT c.name, o.amount
FROM customers c
LEFT JOIN orders o
ON o.customer_id = c.id;Sonucu Okuma
İşte bu sorgunun çıktısı. Alice iki kez eşleştiği için iki kez görünür. Bob bir kez eşleşti. Carol hiçbir şeyle eşleşmedi; bu nedenle amount sütununda NULL değeriyle yine de görünür.
NULL içeren bu tek Carol satırı, LEFT JOIN işleminin ayırt edici özelliğidir. Mülakat yapan kişi, sesli düşünürken şunu söylemenizi bekler: "Eşleşmeyen sol satırlar, sağ taraftaki NULL değerleriyle varlığını korur."
-- name | amount
-- Alice | 50
-- Alice | 75
-- Bob | 20
-- Carol | NULL <-- preserved, no matchNULL Değerleri Nereden Gelir
NULL hiçbir yerde saklanmaz. Sağ tablodan amount değerini sağlayacak bir satır olmadığı için veritabanı onu kendisi oluşturur.
Sağ tablodan alınan her sütun, eşleşmeyen bir sol satır için NULL olur: Carol'ın satırında o.id, o.customer_id ve o.amount değerlerinin tümü NULL'dur. Bu önemlidir; çünkü o.customer_id değerinin NULL olması, müşterinin kimliği olmadığı anlamına gelmez, ortada hiç eşleşen sipariş bulunmadığı anlamına gelir.
Müşteri Başına Siparişleri Sayma
Sık sorulan bir devam sorusu şudur: "Her müşterinin, sıfır siparişi olanlar da dahil, kaç siparişi var?" LEFT JOIN işlemi ile COUNT bunu tam olarak karşılar; ancak * yerine sağ tablonun sütununu saymanız gerekir.
COUNT(o.id) NULL değerlerini yok saydığı için Carol'ın sonucu 0 olur. COUNT(*) ise oluşturulan NULL satırı hâlâ bir satır olduğu için Carol için yanlış biçimde 1 döndürür.
SELECT c.name, COUNT(o.id) AS order_count
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.name;
-- Alice | 2
-- Bob | 1
-- Carol | 0COUNT(*) ile COUNT(column) Arasındaki Tuzak
Bu, klasik bir mülakat tuzağıdır. LEFT JOIN işleminden sonra eşleşmeyen sol satır, sağ sütunları NULL olarak sonuçta fiziksel olarak bulunur.
COUNT(*)bu satırı sayar ve siparişi olmayan bir müşteri için 1 döndürür.COUNT(o.id)NULL değerini atlar ve doğru biçimde 0 döndürür.
Gerçek sıfırları elde etmeniz gerektiğinde, eşleşme olmayan tarafta NULL olabilecek bir sütunu her zaman sayın.
-- WRONG: Carol shows 1
SELECT c.name, COUNT(*) AS n
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.name;LEFT JOIN ile Toplama
COUNT dışındaki toplama işlevleri, oluşturulan NULL değerleriyle sorunsuz çalışır. SUM NULL değerlerini yok sayar; bu nedenle eşleşmeyen bir müşteri için NULL döner, hata oluşmaz.
Mülakat yapanlar raporlama sırasında çoğu zaman NULL yerine sıfır görmek ister. Varsayılan bir değer koymak için toplama işlevini COALESCE içine alın.
SELECT c.name,
COALESCE(SUM(o.amount), 0) AS total_spent
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.name;
-- Alice | 125
-- Bob | 20
-- Carol | 0Sol ve Sağ Tabloyu Açıkça İfade Etme
Mülakat yapan kişi "hangi tablo korunuyor?" diye sorduğunda kendinizden emin biçimde şu yanıtı verin: JOIN anahtar sözcüğünün solundaki tablo. Soldan sağa okuyun.
A LEFT JOIN B = A'nın tümünü koru. Bunun yerine B'nin tümünü korumak için ya B LEFT JOIN A yazın ya da RIGHT JOIN kullanın. Çoğu ekip, okunabilirlik için tabloların sırasını değiştirerek yalnızca LEFT JOIN kullanmayı tercih eder.
Zihinsel Kontrol Listesi
Mülakatta bir LEFT JOIN işlemi gördüğünüzde bu kontrol listesini sesli olarak uygulayın:
- Korunan taraf? Sol tablo; tüm satırlar korunur.
- Eşleşmeyen satırlar? Sağ taraftan gelen NULL değerleriyle bir kez görünür.
- Sayma mı yapıyorsunuz? Gerçek sıfırlar için
COUNT(right_col)kullanın. - Toplama mı yapıyorsunuz? NULL yerine 0 gerekiyorsa
COALESCEiçine alın.
Bu kontrol listesini sözlü olarak ifade etmeniz, kıdemli düzeyde titizlik gösterir.
Hızlı Kontrol
Sayma konusunda LEFT JOIN sezginizi sınayın.
Özet
LEFT JOIN, sol tablodaki her satırı korur. Eşleşen sol satırlar sağ taraftaki eşleşmeleriyle birleştirilir; eşleşmeyen sol satırlar, sağ tablonun tüm sütunlarında NULL olacak şekilde bir kez varlığını sürdürür.
- Sol tablo,
JOINanahtar sözcüğünden önce yazılan tablodur. - Oluşturulan NULL değerleri, eşleşme olmayan satırları gösterir.
COUNT(right_col)gerçek sıfırları verir;COUNT(*)vermez.COALESCE(SUM(...), 0)NULL toplamları sıfıra dönüştürür.
Bu, ilerleyen derslerde eksik verileri ve eşleşmeyenleri seçen JOIN sorgularını bulmanın temelini oluşturur.
Sıkça Sorulan Sorular
“LEFT JOIN ve Eşleşmeyen Satırları Koruma” dersi ücretsiz mi?
Evet — “LEFT JOIN ve Eşleşmeyen Satırları Koruma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve SQL Interview Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Interview Prep kursu toplamda 4 dersten oluşur.
“LEFT JOIN ve Eşleşmeyen Satırları Koruma” dersinde ne öğreneceğim?
LEFT JOIN'in neleri koruduğunu ve eşleşmeyen satırlarda NULL değerlerin nasıl göründüğünü öğrenin. SQL Interview Prep ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
SQL Interview Prep öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te SQL Interview Prep, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“LEFT JOIN ve Eşleşmeyen Satırları Koruma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu SQL Interview Prep dersinde kod yazıp çalıştırabilir miyim?
Evet. Her SQL Interview Prep dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- LEFT JOIN ve Eşleşmeyen Satırları Koruma
- RIGHT ve FULL OUTER JOIN Anlamı
- Eşleşmesi Olmayan Satırları Bulma (Anti-Join)
- Dış Birleştirmede WHERE Kullanma Tuzağı