İlişkili ve İlişkisiz Alt Sorgular
Dış satıra başvuran ilişkili alt sorguları ve bunların performans özelliklerini anlayın; EXISTS'in IN'den ne zaman daha iyi olduğunu öğrenin.
İlişkili ve İlişkisiz Alt Sorgular, CoddyKit'te ücretsiz bir SQL Academy dersidir. Bu, 4 dersinin 2. 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.
İlişkisiz Alt Sorgular
İlişkisiz bir alt sorgu dış satıra başvurmaz. Bir kez çalışır ve sonucu yeniden kullanılır:
SELECT * FROM users
WHERE id IN (
SELECT user_id FROM orders WHERE status = 'paid'
);İlişkili Alt Sorgular
İlişkili bir alt sorgu dış satıra başvurur — mantıksal olarak her dış satır için yeniden çalışır:
SELECT u.id, u.email
FROM users u
WHERE EXISTS (
SELECT 1 FROM orders o
WHERE o.user_id = u.id
AND o.total > 1000
);Fark Nasıl Anlaşılır
İç SELECT, dış FROM içindeki bir sütuna başvuruyorsa alt sorgu ilişkilidir.
Performans Sonuçları
Basit bir ilişkili alt sorgunun maliyeti O(dış × iç) olur. Modern planlayıcılar bunu çoğu zaman yarı birleştirmeye veya karma birleştirmeye dönüştürür — yine de mümkün olduğunda daha basit biçimi yazmalısınız.
EXISTS ve IN
"En az bir eşleşme" için:
-- IN with non-correlated subquery (often the planner's favourite):
SELECT u.* FROM users u
WHERE u.id IN (SELECT user_id FROM orders);
-- EXISTS with correlated subquery (NULL-safe alternative):
SELECT u.* FROM users u
WHERE EXISTS (SELECT 1 FROM orders o WHERE o.user_id = u.id);NOT EXISTS Her Zaman NOT IN'den Üstündür
İç küme NULL içerdiğinde NOT IN bozulur. NOT EXISTS bozulmaz. Karşıt birleştirme için her zaman NOT EXISTS kullanmayı tercih edin:
-- BUG-prone:
SELECT u.* FROM users u
WHERE u.id NOT IN (SELECT excluded_id FROM blocklist);
-- Safe:
SELECT u.* FROM users u
WHERE NOT EXISTS (SELECT 1 FROM blocklist b WHERE b.excluded_id = u.id);SELECT İçinde İlişkili Alt Sorgular
"Satır başına arama" kalıbı:
SELECT u.id, u.email,
(SELECT MAX(created_at) FROM orders o WHERE o.user_id = u.id) AS last_order_at
FROM users u;
-- Often readable, but consider a LEFT JOIN + GROUP BY.UPDATE İçinde İlişkili Alt Sorgular
Her satır için türetilmiş bir değer alın:
UPDATE products p
SET review_count = (
SELECT COUNT(*) FROM reviews r WHERE r.product_id = p.id
);LATERAL JOIN: Daha Temiz Bir İlişkili Alt Sorgu Kalıbı
"Her dış satır için bazı satırları arama" durumunda LATERAL çoğu zaman daha açık ve hızlıdır — bu konu Gelişmiş JOIN Kalıpları dersinde ele alınacaktır.
Alt Sorgu Önbelleğe Alma
PostgreSQL, varsayılan olarak alt sorgu sonuçlarını satırlar arasında önbelleğe almaz. Aynı iç sonuca birçok kez ihtiyaç duyuluyorsa bir CTE kullanın.
İlişkilendirme Sütununu Dizinleyin
İç alt sorgu, dış satırın anahtarına göre filtreleme yapar. Bu anahtar üzerinde dizin yoksa her dış satır için tam tarama yapılır.
-- For the orders example, this is essential:
CREATE INDEX orders_user_id_idx ON orders(user_id);Özet
İlişkili alt sorgular dış satıra başvurur.
- EXISTS, ilişkili sorguların temel biçimidir
- NOT IN yerine NOT EXISTS kullanmayı tercih edin
- İlişkilendirme sütununu dizinleyin
- Birçok durumda LATERAL daha temiz bir alternatiftir
Hızlı Kontrol
İç küme NULL içerebiliyorsa NOT EXISTS neden NOT IN'den daha güvenlidir?
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
“İlişkili ve İlişkisiz Alt Sorgular” dersi ücretsiz mi?
Evet — “İlişkili ve İlişkisiz Alt Sorgular” 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.
“İlişkili ve İlişkisiz Alt Sorgular” dersinde ne öğreneceğim?
Dış satıra başvuran ilişkili alt sorguları ve bunların performans özelliklerini anlayın; EXISTS'in IN'den ne zaman daha iyi olduğunu öğrenin. 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 2. dersidir.
“İlişkili ve İlişkisiz Alt Sorgular” 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
- Skaler, Satır ve Tablo Alt Sorguları
- İlişkili ve İlişkisiz Alt Sorgular
- Ortak Tablo İfadeleri (WITH)
- Hiyerarşiler için Özyinelemeli CTE'ler