Hiyerarşiler için Özyinelemeli CTE'ler
Hiyerarşik verileri (kuruluş şemaları, dizili yorumlar, grafik geçişi) WITH RECURSIVE ve durdurma koşullarıyla gezin.
Hiyerarşiler için Özyinelemeli CTE'ler, CoddyKit'te ücretsiz bir SQL Academy dersidir. Bu, 4 dersinin 4. 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.
Özyineleme Neden Gerekli?
Düz SQL, derinliği bilinmeyen bir ağaçta dolaşamaz: üst öğelerin üst öğeleri, alt öğelerin alt öğeleri. Özyinelemeli CTE'ler, standart SQL çözümüdür.
Yapısı
Özyinelemeli bir CTE'nin UNION ALL ile birleştirilen iki bölümü vardır:
WITH RECURSIVE name AS (
-- 1. Anchor query: seed rows
SELECT ...
UNION ALL
-- 2. Recursive step: references the CTE itself
SELECT ...
FROM name JOIN ...
)
SELECT * FROM name;Kuruluş Şemasında Dolaşma
Belirli bir yöneticinin doğrudan veya dolaylı olarak kendisine bağlı tüm çalışanlarını bulun:
WITH RECURSIVE reports AS (
-- anchor: the manager themself
SELECT id, full_name, manager_id, 0 AS depth
FROM employees WHERE id = 42
UNION ALL
-- recurse: people whose manager is in reports
SELECT e.id, e.full_name, e.manager_id, r.depth + 1
FROM employees e
JOIN reports r ON r.id = e.manager_id
)
SELECT * FROM reports ORDER BY depth, full_name;İç İçe Yorumlar
Bir tartışma ağacında kök düğümden başlayarak dolaşın:
WITH RECURSIVE thread AS (
SELECT id, parent_id, body, 0 AS depth, ARRAY[id] AS path
FROM comments WHERE id = $1
UNION ALL
SELECT c.id, c.parent_id, c.body, t.depth + 1, t.path || c.id
FROM comments c
JOIN thread t ON c.parent_id = t.id
)
SELECT * FROM thread ORDER BY path;Sonlandırma
Özyinelemeli adım yeni satır döndürmediğinde özyineleme durur.
Sonsuz Döngülerden Kaçınma
Grafiğinizde döngüler varsa ziyaret edilen düğümleri izleyin:
WITH RECURSIVE walk AS (
SELECT id, ARRAY[id] AS path FROM nodes WHERE id = $1
UNION ALL
SELECT e.target_id, w.path || e.target_id
FROM edges e
JOIN walk w ON e.source_id = w.id
WHERE e.target_id <> ALL(w.path)
)
SELECT * FROM walk;Sayısal Dizi
Özyinelemeli CTE'ler diziler de oluşturabilir:
WITH RECURSIVE n(i) AS (
VALUES (1)
UNION ALL
SELECT i + 1 FROM n WHERE i < 100
)
SELECT i, i*i AS square FROM n;Ürün Ağacı
Bir ürünü, alt montajlar da dahil olmak üzere tüm bileşenlerine ayırın:
WITH RECURSIVE bom AS (
SELECT part_id, sub_part_id, qty FROM parts WHERE part_id = $1
UNION ALL
SELECT p.part_id, p.sub_part_id, p.qty * bom.qty
FROM parts p
JOIN bom ON bom.sub_part_id = p.part_id
)
SELECT sub_part_id, SUM(qty) AS total_qty FROM bom GROUP BY sub_part_id;Derinlik Sınırları
Güvenlik amacıyla özyineleme derinliğini sınırlayın:
WITH RECURSIVE tree AS (
SELECT id, parent_id, 0 AS depth FROM nodes WHERE id = $1
UNION ALL
SELECT n.id, n.parent_id, t.depth + 1
FROM nodes n JOIN tree t ON n.parent_id = t.id
WHERE t.depth < 10
)
SELECT * FROM tree;UNION ve UNION ALL
UNION ALL genellikle tercih edilir. UNION yinelenenleri kaldırır — bir düğüme birden çok yoldan ulaşılabildiğinde kullanışlıdır.
Performans
Özyinelemeli CTE'ler yinelemeli olarak değerlendirilir. Her adımın "çalışma tablosu", önceki adımın ürettiği satırlardır. Birleştirme sütunlarını indeksleyin.
Özet
Özyinelemeli CTE'ler hiyerarşilerde ve graflarda gezinir.
- Başlangıç sorgusu + UNION ALL + özyinelemeli adım
- Özyinelemeli adım hiç satır döndürmediğinde durur
- Döngüleri kırmak için bir yol dizisi kullanın
Kısa Kontrol
Bir CTE'yi özyinelemeli CTE'ye hangi anahtar sözcük dönüştürür?
Sıkça Sorulan Sorular
“Hiyerarşiler için Özyinelemeli CTE'ler” dersi ücretsiz mi?
Evet — “Hiyerarşiler için Özyinelemeli CTE'ler” 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.
“Hiyerarşiler için Özyinelemeli CTE'ler” dersinde ne öğreneceğim?
Hiyerarşik verileri (kuruluş şemaları, dizili yorumlar, grafik geçişi) WITH RECURSIVE ve durdurma koşullarıyla gezin. 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 4. dersidir.
“Hiyerarşiler için Özyinelemeli CTE'ler” 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