CTE RECURSIVE untuk Hierarki
Telusuri data hierarkis (bagan organisasi, komentar berutas, penelusuran grafik) dengan WITH RECURSIVE dan kondisi penghentian.
CTE RECURSIVE untuk Hierarki adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.
Mengapa Rekursif?
SQL biasa tidak dapat menelusuri pohon dengan kedalaman yang tidak diketahui: orang tua dari orang tua, anak dari anak. CTE rekursif adalah solusi SQL standar.
Struktur
CTE rekursif memiliki dua bagian yang digabungkan oleh UNION ALL:
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;Menelusuri Struktur Organisasi
Temukan semua karyawan yang melapor (secara langsung atau tidak langsung) kepada manajer tertentu:
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;Komentar Bertingkat
Telusuri pohon diskusi mulai dari akar:
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;Penghentian
Rekursi berhenti ketika langkah rekursif tidak menghasilkan baris baru.
Menghindari Perulangan Tak Terbatas
Jika graf Anda memiliki siklus, lacak simpul yang telah dikunjungi:
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;Deret Numerik
CTE rekursif juga dapat menghasilkan rangkaian:
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;Daftar Komponen
Uraikan produk menjadi semua komponennya, termasuk subrakitan:
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;Batas Kedalaman
Demi keamanan, batasi kedalaman rekursi:
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 vs UNION ALL
UNION ALL biasanya menjadi pilihan. UNION menghapus duplikasi — berguna ketika sebuah simpul dapat dicapai melalui beberapa jalur.
Kinerja
CTE rekursif dievaluasi secara iteratif. "Tabel kerja" pada setiap langkah adalah baris yang dihasilkan oleh langkah sebelumnya. Buat indeks pada kolom yang digunakan untuk JOIN.
Ringkasan
CTE rekursif menelusuri hierarki dan graf.
- Bagian dasar + UNION ALL + langkah rekursif
- Berhenti ketika langkah rekursif tidak menghasilkan baris
- Gunakan larik jalur untuk memutus siklus
Pemeriksaan Singkat
Kata kunci mana yang mengubah CTE menjadi CTE rekursif?
Pertanyaan yang Sering Diajukan
Apakah pelajaran “CTE RECURSIVE untuk Hierarki” gratis?
Ya — teks lengkap “CTE RECURSIVE untuk Hierarki” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “CTE RECURSIVE untuk Hierarki”?
Telusuri data hierarkis (bagan organisasi, komentar berutas, penelusuran grafik) dengan WITH RECURSIVE dan kondisi penghentian. Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai SQL Academy?
Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “CTE RECURSIVE untuk Hierarki” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?
Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Subkueri Skalar, Baris, dan Tabel
- Subkueri Berkorelasi vs Tidak Berkorelasi
- Ekspresi Tabel Umum (WITH)
- CTE RECURSIVE untuk Hierarki