Anti-Birleştirmeler ve Yarı-Birleştirmeler (NOT EXISTS)
EXISTS/NOT EXISTS kullanarak «A'da olup B'de eşleşmeyen satırları» (anti-birleştirme) ve «A'da olup B'de en az bir eşleşmesi olan satırları» (yarı-birleştirme) bulun.
Anti-Birleştirmeler ve Yarı-Birleştirmeler (NOT EXISTS), CoddyKit'te ücretsiz bir SQL Academy 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, SQL Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. SQL Academy kursu toplamda 4 dersten oluşur.
Yarı Birleştirme: "En Az Bir Eşleşme Var"
B'de en az bir eşleşen satırı bulunan A satırlarını döndürün; ancak yalnızca A'nın sütunlarını alın. SQL, yarı birleştirmeleri EXISTS veya IN aracılığıyla uygular.
EXISTS ile Yarı Birleştirme
En az bir sipariş vermiş kullanıcılar:
SELECT u.* FROM users u
WHERE EXISTS (
SELECT 1 FROM orders o WHERE o.user_id = u.id
);IN ile Yarı Birleştirme
Aynı sonuç, farklı bir biçem:
SELECT * FROM users
WHERE id IN (SELECT user_id FROM orders);EXISTS Neden Genellikle Daha İyidir
EXISTS kısa devre yapar: her dış satır için ilk eşleşmede durur. IN, iç kümenin tamamını gerçekleştirebilir. Modern planlayıcılar çoğu zaman aynı planı seçerek optimize eder; ancak çok büyük iç kümeler için EXISTS daha güvenli tercihtir.
Karşıt Birleştirme: "Eşleşme Yok"
Hiçbir zaman (NEVER) sipariş vermemiş kullanıcılar — deyimsel üç biçim:
-- NOT EXISTS (preferred):
SELECT u.* FROM users u
WHERE NOT EXISTS (
SELECT 1 FROM orders o WHERE o.user_id = u.id
);
-- LEFT JOIN ... IS NULL:
SELECT u.* FROM users u
LEFT JOIN orders o ON o.user_id = u.id
WHERE o.id IS NULL;
-- NOT IN (risky with NULLs):
SELECT * FROM users WHERE id NOT IN (SELECT user_id FROM orders);NOT IN Neden Risklidir
İç alt sorgu NULL içerirse NOT IN, NULL döndürür ve WHERE, predicate NULL olan satırları eler. Sonuç: sıfır satır. NOT EXISTS bu sorunu yaşamaz.
Planlayıcı Optimizasyonu
Modern PostgreSQL, EXISTS ve NOT EXISTS ifadelerini yarı birleştirme/karşıt birleştirme kalıpları olarak tanır ve bunları karma birleşimleriyle çalıştırabilir:
EXPLAIN ANALYZE
SELECT u.* FROM users u
WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.user_id = u.id);
-- → Hash Anti JoinÇok Sütunlu Karşıt Birleştirmeler
Bileşik anahtarlar kullanın:
SELECT * FROM order_items oi
WHERE NOT EXISTS (
SELECT 1 FROM shipments s
WHERE s.order_id = oi.order_id
AND s.line_no = oi.line_no
);EXISTS ve Ek Koşulla Yarı Birleştirme
İç alt sorguya filtreler ekleyin:
SELECT u.* FROM users u
WHERE EXISTS (
SELECT 1 FROM orders o
WHERE o.user_id = u.id
AND o.status = 'paid'
AND o.created_at >= NOW() - INTERVAL '30 days'
);İlişkilendirme Sütununu Dizinleyin
Hem EXISTS hem de NOT EXISTS için iç alt sorgu dış satırın anahtarına göre filtre uygular. Bu anahtar üzerinde dizin yoksa her dış satır için bir tarama yapılır:
CREATE INDEX orders_user_id_idx ON orders(user_id);LEFT JOIN ... IS NULL Ne Zaman Kullanılır
Eşleşmeyen tarafın sütunlarını da isteyen panolar için LEFT JOIN biçemi doğal bir seçimdir. Salt karşıt birleştirme anlamı için NOT EXISTS daha açıktır.
SQL Ötesi: Bloom Filtreleri
Çok büyük karşıt birleştirmelerde bloom filtresiyle ön filtreleme yardımcı olabilir. PostgreSQL, bloom uzantısı aracılığıyla bloom dizinlerini destekler.
Özet
Yarı birleştirme = "eşleşme var"; karşıt birleştirme = "eşleşme yok".
- Yarı birleştirme için EXISTS
- Karşıt birleştirme için NOT EXISTS (NULL açısından güvenli)
- İlişkilendirme sütununu dizinleyin
- İç küme NULL içeremiyorsa NOT IN kullanmaktan kaçının
Hızlı Kontrol
Hiçbir zaman (NEVER) sipariş vermemiş kullanıcıları istiyorsunuz. En güvenli ve en alışılmış SQL hangisidir?
Yapay zeka eğitmeniyle SQL öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 46
- Dersler
- 183
Sıkça Sorulan Sorular
“Anti-Birleştirmeler ve Yarı-Birleştirmeler (NOT EXISTS)” dersi ücretsiz mi?
Evet — “Anti-Birleştirmeler ve Yarı-Birleştirmeler (NOT EXISTS)” 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 Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. SQL Academy kursu toplamda 4 dersten oluşur.
“Anti-Birleştirmeler ve Yarı-Birleştirmeler (NOT EXISTS)” dersinde ne öğreneceğim?
EXISTS/NOT EXISTS kullanarak «A'da olup B'de eşleşmeyen satırları» (anti-birleştirme) ve «A'da olup B'de en az bir eşleşmesi olan satırları» (yarı-birleştirme) bulun. SQL Academy 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 Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te SQL Academy, 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.
“Anti-Birleştirmeler ve Yarı-Birleştirmeler (NOT EXISTS)” 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 Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her SQL Academy 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
- Cross Join ve Kartezyen Çarpımlar
- Lateral Birleştirmeler (LATERAL JOIN)
- Anti-Birleştirmeler ve Yarı-Birleştirmeler (NOT EXISTS)
- Çok Tablolu Birleştirmelerde Performans Ayarı