Eşleşmesi Olmayan Satırları Bulma (Anti-Join)
Yetim kayıtları ve eksik verileri bulmak için LEFT JOIN / IS NULL örüntüsünü öğrenin.
Eşleşmesi Olmayan Satırları Bulma (Anti-Join), CoddyKit'te ücretsiz bir Coding Interview Prep dersidir. Bu, 4 dersinin 3. 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, Coding Interview Prep öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Coding Interview Prep kursu toplamda 4 dersten oluşur.
Karşı Birleştirme Sorusu
En çok sorulan dış birleştirme sorularından biri: "Hiç sipariş vermemiş müşterileri bulun." Ya da: "Hiç satılmamış ürünleri listeleyin," veya "Eşleşen müşterisi olmayan siparişleri bulun."
Bunların hepsi aynı biçime sahiptir: bir tablodaki, başka bir tabloda eşleşmesi olmayan satırlar. Temiz çözüm, bir LEFT JOIN ile IS NULL filtresinden oluşturulan karşı birleştirmedir.
Temel Fikir
Bir LEFT JOIN ile başlayın: bu işlem her sol satırı korur ve eşleşmeyen sol satırların sağ tablo sütunlarına NULL yerleştirir.
Dolayısıyla eşleşmeyen satırlar, sağ tablo sütunlarından birinin NULL olduğu satırlardır. Buna göre filtre uyguladığınızda eşleşmeyen satırları ayıklarsınız. Bütün yöntem bundan ibarettir.
Kalıbı Oluşturma
Aşağıda siparişi olmayan müşterileri bulan klasik karşı birleştirme yer alır. Bunu iki adımda okuyun: LEFT JOIN tüm müşterileri tutar, ardından WHERE o.customer_id IS NULL yalnızca eşleşmeyenleri tutar.
SELECT c.id, c.name
FROM customers c
LEFT JOIN orders o
ON o.customer_id = c.id
WHERE o.customer_id IS NULL;
-- only customers with zero ordersBunun Adım Adım Çalışma Nedeni
Carol'un siparişi yokken verilerimizle izleyin:
- LEFT JOIN, Alice'i (x2), Bob'u (x1) ve sağ sütunları NULL olan Carol'u üretir.
WHERE o.customer_id IS NULL, Alice ile Bob'u eler (sağ sütunlarında gerçek değerler vardır).- Yalnızca Carol'un satırı, yani oluşturulan NULL satırı, kalır.
Filtre birleştirmeden sonra çalıştığı için bu NULL değerlerini görür ve tam olarak yetim satırları seçer.
Sınanacak Doğru Sütunu Seçin
Gerçek bir eşleşmede meşru olarak hiçbir zaman NULL olamayacak bir sağ tablo sütununu sınayın; tercihen birleştirme anahtarını veya birincil anahtarı.
o.shipped_at gibi NULL olabilen bir sağ sütunu sınarsanız, var olan ancak gönderilmemiş siparişleri de yakalarsınız; bu yanlış sonuçtur. o.customer_id (birleştirme anahtarı) veya o.id (birincil anahtarı) üzerinde sınama yapmak, NULL değerinin hiçbir satırın eşleşmediği anlamına geldiğini garanti eder.
-- SAFE: join key / primary key
WHERE o.id IS NULL
-- RISKY: a nullable data column
WHERE o.shipped_at IS NULL -- catches unshipped too!Karşı Birleştirme ile NOT IN Karşılaştırması
Görüşmeciler karşı birleştirmeyi NOT IN ile karşılaştırır. Bunlar eşdeğer görünür, ancak NULL değerlerinde farklı davranır.
Alt sorgu herhangi bir NULL döndürürse NOT IN hiç satır döndürmez; bu, kötü şöhretli sessiz bir hatadır. LEFT JOIN / IS NULL karşı birleştirmesi bundan etkilenmez.
-- DANGEROUS if any customer_id is NULL
SELECT id, name FROM customers
WHERE id NOT IN (SELECT customer_id FROM orders);
-- SAFE anti-join, same intent
SELECT c.id, c.name FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
WHERE o.id IS NULL;Karşı Birleştirme ile NOT EXISTS Karşılaştırması
Diğer eşdeğer seçenek, ilişkili bir alt sorguyla kullanılan NOT EXISTS ifadesidir. Bu da NULL değerlerini doğru biçimde ele alır ve çoğu zaman aynı hızdadır.
Bu üç yöntemin (LEFT JOIN/IS NULL, NOT EXISTS, NOT IN) tümü karşı birleştirmeleri ifade edebilir; ancak NULL güvenliği nedeniyle görüşmede LEFT JOIN/IS NULL veya NOT EXISTS'i tercih edin. NOT IN tuzağından söz etmeniz puan kazandırır.
SELECT c.id, c.name
FROM customers c
WHERE NOT EXISTS (
SELECT 1 FROM orders o
WHERE o.customer_id = c.id
);Yaygın Bir Hata
Sık yapılan bir hata, eşleşmeme koşulunu WHERE yerine ON yan tümcesine koymaktır.
... ON o.customer_id = c.id AND o.id IS NULL yazmak sonucu filtrelemez; yalnızca neyin eşleşme sayılacağını değiştirir ve her müşteri LEFT JOIN'de kalmaya devam eder. IS NULL sınaması, birleştirmeden sonra uygulanmak üzere WHERE içinde bulunmalıdır. Bu tuzağı bir sonraki derste tümüyle ele alacağız.
Yetim Alt Satırları Bulma
Aynı kalıp diğer yönde de çalışır. Eksik bir müşteriye başvuran siparişleri (yetimleri, veri bütünlüğü denetimi için) bulmak üzere orders tablosunu koruyun ve müşteri tarafında NULL sınayın.
SELECT o.id AS order_id, o.customer_id
FROM orders o
LEFT JOIN customers c
ON c.id = o.customer_id
WHERE c.id IS NULL;
-- orders pointing to a non-existent customerYetimleri Sayma
Çoğu zaman istenen yalnızca bir sayıdır: "Hiç sipariş vermemiş kaç müşteri var?" Karşı birleştirmeyi sarmalayın veya doğrudan sayın.
Karşı birleştirme zaten her yetim için bir satır döndürdüğünden, burada üzerinde COUNT(*) uygulanan basit bir sayım doğrudur; eşleşmeyen her müşteri için tam olarak bir satır vardır.
SELECT COUNT(*) AS never_ordered
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
WHERE o.id IS NULL;Tekrar Kullanılabilir Şablon
Bu üç satırlık iskeleti ezberleyin; çok geniş bir görüşme soruları ailesini çözer:
FROM keep_table kLEFT JOIN other o ON o.fk = k.idWHERE o.id IS NULL
"Eşleşen Y'si olmayan X" olarak tanımlanan satılmamış ürünleri, atanmamış talepleri, hiç giriş yapmamış kullanıcıları ve diğer her şeyi bulmak için tabloları ve anahtarları değiştirin.
Hızlı Kontrol
order_items tablosunda hiç yer almamış ürünlere ihtiyacınız var.
Özet
Karşı birleştirme eşleşmesi olmayan satırları bulur: önce LEFT JOIN, ardından WHERE right_key IS NULL.
- Birleştirme anahtarını veya birincil anahtarı sınayın; NULL olabilen bir veri sütununu asla sınamayın.
IS NULLsınamasıONiçinde değil,WHEREiçinde yer alır.NOT EXISTSile eşdeğerdir; NULL değerlerinde bozulanNOT INyerine bunu tercih edin.- Yetim alt satırları bulmak için tabloları ters çevirin.
Tek şablon, birçok soru: "Eşleşen Y'si olmayan X."
Sıkça Sorulan Sorular
“Eşleşmesi Olmayan Satırları Bulma (Anti-Join)” dersi ücretsiz mi?
Evet — “Eşleşmesi Olmayan Satırları Bulma (Anti-Join)” 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 Coding Interview Prep kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Coding Interview Prep kursu toplamda 4 dersten oluşur.
“Eşleşmesi Olmayan Satırları Bulma (Anti-Join)” dersinde ne öğreneceğim?
Yetim kayıtları ve eksik verileri bulmak için LEFT JOIN / IS NULL örüntüsünü öğrenin. Coding 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.
Coding Interview Prep öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Coding 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 3. dersidir.
“Eşleşmesi Olmayan Satırları Bulma (Anti-Join)” 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 Coding Interview Prep dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Coding 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ğı