0Pricing
SQL Academy · Pelajaran

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

  1. Subkueri Skalar, Baris, dan Tabel
  2. Subkueri Berkorelasi vs Tidak Berkorelasi
  3. Ekspresi Tabel Umum (WITH)
  4. CTE RECURSIVE untuk Hierarki
← Kembali ke SQL Academy