0Pricing
SQL Interview Prep · Pelajaran

Anggota Anchor dan Rekursif

Struktur dua bagian CTE rekursif dan cara penghentiannya bekerja.

Anggota Anchor dan Rekursif adalah pelajaran SQL Interview Prep gratis di CoddyKit. Ini adalah pelajaran 1 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 Interview Prep, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Interview Prep mencakup 4 pelajaran total.

Mengapa CTE Rekursif Sering Muncul

Ketika pewawancara memberikan bagan organisasi, daftar material, atau pohon kategori dan meminta semua turunannya, mereka sedang menguji apakah Anda akan menggunakan CTE rekursif. Penggabungan biasa hanya dapat menelusuri jumlah tingkat yang tetap; rekursi dapat menelusuri kedalaman berapa pun.

Frasa petunjuk dalam pertanyaan biasanya adalah "hingga kedalaman berapa pun" atau "sampai ke bagian paling bawah". Itulah tandanya. Dalam pelajaran ini, Anda akan mempelajari struktur dua bagian yang dimiliki setiap CTE rekursif: bagian awal dan bagian rekursif.

Pola Dasar Dua Bagian

CTE rekursif selalu memiliki kata kunci WITH RECURSIVE (Postgres, SQLite, MySQL 8+; SQL Server menghilangkan RECURSIVE) dan isi yang terdiri dari dua kueri yang digabungkan dengan UNION ALL:

  • Bagian awal — baris awal, dijalankan sekali.
  • Bagian rekursif — merujuk pada nama CTE itu sendiri, dijalankan berulang kali.

Hafalkan pola dasar ini; pewawancara senang meminta Anda menulisnya dari awal.

WITH RECURSIVE cte AS (
    -- anchor member
    SELECT ...
    UNION ALL
    -- recursive member
    SELECT ... FROM cte JOIN ...
)
SELECT * FROM cte;

Apa yang Dilakukan Bagian Awal

Bagian awal adalah kueri biasa yang tidak merujuk pada CTE. Bagian ini menghasilkan baris awal — titik awal tingkat nol. Untuk bagan organisasi, biasanya bagian ini adalah CEO (baris yang manajernya NULL); untuk deret angka, bagian ini adalah angka pertama.

Bagian awal dijalankan tepat satu kali. Hasilnya menjadi kelompok baris pertama yang diberikan kepada langkah rekursif.

-- Anchor: the top of the hierarchy
SELECT id, name, manager_id, 1 AS depth
FROM employees
WHERE manager_id IS NULL

Apa yang Dilakukan Bagian Rekursif

Bagian rekursif merujuk pada CTE berdasarkan namanya. Pada setiap iterasi, bagian ini menggabungkan baris yang dihasilkan oleh iterasi sebelumnya dengan tabel dasar untuk menemukan tingkat berikutnya ke bawah.

Bagian ini tidak melihat seluruh isi CTE hingga saat itu — hanya baris yang ditambahkan pada langkah sebelumnya. Inilah model pemahaman utama yang diuji oleh pewawancara.

-- Recursive: children of the rows found so far
SELECT e.id, e.name, e.manager_id, c.depth + 1
FROM employees e
JOIN cte c ON e.manager_id = c.id

Menggabungkannya

Gabungkan bagian awal dan bagian rekursif dengan UNION ALL, lalu mesin basis data akan melakukan iterasi secara otomatis. Setiap putaran menambahkan tingkat berikutnya sampai bagian rekursif menghasilkan nol baris, dan pada saat itu rekursi berhenti.

Berikut penelusuran bagan organisasi yang lengkap dan dapat dijalankan, sekaligus melacak depth.

WITH RECURSIVE org AS (
    SELECT id, name, manager_id, 1 AS depth
    FROM employees
    WHERE manager_id IS NULL
    UNION ALL
    SELECT e.id, e.name, e.manager_id, o.depth + 1
    FROM employees e
    JOIN org o ON e.manager_id = o.id
)
SELECT id, name, depth FROM org ORDER BY depth, id;

Cara Rekursi Berhenti

Rekursi berhenti ketika bagian rekursif menghasilkan tidak ada baris baru. Tidak diperlukan penghitung perulangan eksplisit — penggabungan secara alami tidak lagi menghasilkan baris setelah Anda mencapai daun-daun pohon.

Dalam contoh organisasi, ketika Anda mencapai karyawan yang tidak memiliki bawahan langsung, penggabungan pada iterasi berikutnya tidak menemukan anak, menghasilkan keluaran kosong, dan mesin basis data berhenti. Memahami perilaku yang berhenti dengan sendirinya ini merupakan pertanyaan lanjutan klasik.

UNION ALL vs UNION

Pewawancara sering bertanya mengapa kita menggunakan UNION ALL, bukan UNION. Ada dua alasan:

  • Kinerja — UNION menghapus duplikasi pada setiap iterasi, dan proses ini mahal.
  • Ketepatan — dalam sebuah pohon, baris duplikat biasanya tidak dapat muncul, sehingga penghapusan duplikasi hanya membuang pekerjaan.

Gunakan UNION hanya ketika strukturnya berupa graf dan Anda memang ingin menggabungkan simpul yang berulang — tetapi untuk keamanan terhadap siklus, penjagaan eksplisit lebih baik (akan dibahas nanti).

Melacak Kedalaman dan Jalur

Dua kolom tambahan membuat hasil rekursif jauh lebih berguna dan sering diminta dalam wawancara:

  • kedalaman — mulai dari 1 pada bagian awal, lalu tambahkan 1 pada bagian rekursif.
  • jalur — kumpulkan rangkaian ID atau nama agar Anda dapat melihat rute dari akar ke simpul.

Membangun path sebagai string juga dapat digunakan sebagai alat untuk mendeteksi siklus nantinya.

WITH RECURSIVE org AS (
    SELECT id, name, manager_id, 1 AS depth,
           CAST(name AS VARCHAR(1000)) AS path
    FROM employees WHERE manager_id IS NULL
    UNION ALL
    SELECT e.id, e.name, e.manager_id, o.depth + 1,
           o.path || ' > ' || e.name
    FROM employees e JOIN org o ON e.manager_id = o.id
)
SELECT name, depth, path FROM org;

Tipe Kolom Harus Sesuai

Hal yang sering luput diperhatikan: bagian awal dan bagian rekursif harus menghasilkan jumlah kolom yang sama dengan tipe yang kompatibel. Jika Anda membuat string path, nilai awal pada bagian awal harus dikonversi ke ukuran yang cukup besar (misalnya VARCHAR(1000)), atau mesin basis data dapat memotongnya atau menghasilkan galat ketidakcocokan tipe pada iterasi berikutnya.

Inilah jenis detail yang sengaja diberikan pewawancara untuk melihat apakah Anda benar-benar pernah menjalankan CTE rekursif, bukan hanya membacanya.

Contoh Daftar Material

Pola dasar yang sama dapat menyelesaikan daftar material: untuk komponen tertentu, tampilkan setiap subkomponen pada kedalaman berapa pun. Bagian awal memilih rakitan teratas; bagian rekursif menelusuri tautan dari parent_part ke child_part.

Perhatikan bahwa strukturnya identik dengan bagan organisasi — hanya nama kolomnya yang berubah. Menyadari bahwa satu pola dasar dapat digunakan untuk banyak masalah adalah keterampilan wawancara yang sebenarnya.

WITH RECURSIVE bom AS (
    SELECT child_part, parent_part, 1 AS lvl
    FROM parts WHERE parent_part = 'ENGINE'
    UNION ALL
    SELECT p.child_part, p.parent_part, b.lvl + 1
    FROM parts p JOIN bom b ON p.parent_part = b.child_part
)
SELECT child_part, lvl FROM bom;

Catatan Dialek

Lembar contekan singkat lintas dialek yang akan dihargai pewawancara:

  • PostgreSQL, SQLite, MySQL 8+: WITH RECURSIVE name AS (...).
  • SQL Server: cukup gunakan WITH name AS (...) — kata kunci RECURSIVE tersirat, dan SQL Server menerapkan MAXRECURSION bawaan sebesar 100.
  • Oracle: mendukung CTE rekursif dan sintaks CONNECT BY yang lebih lama.

Mengatakan "SQL Server tidak menggunakan kata RECURSIVE" menunjukkan pemahaman yang luas.

Pemeriksaan Singkat

Uji pemahaman Anda tentang struktur dua bagian.

Ringkasan

  • WITH RECURSIVE + bagian awal + UNION ALL + bagian rekursif.
  • Bagian awal mengisi tingkat nol dan dijalankan sekali.
  • Bagian rekursif menggabungkan iterasi sebelumnya dengan tabel dasar dan berjalan sampai tidak menghasilkan baris.
  • Gunakan UNION ALL, lacak depth dan path, serta pastikan tipe kolom tetap kompatibel.

Berikutnya: menerapkan pola dasar ini untuk menelusuri bagan organisasi yang nyata ke bawah dan ke atas.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Anggota Anchor dan Rekursif” gratis?

Ya — teks lengkap “Anggota Anchor dan Rekursif” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Interview Prep, upgrade ke CoddyKit PRO. Kursus SQL Interview Prep mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Anggota Anchor dan Rekursif”?

Struktur dua bagian CTE rekursif dan cara penghentiannya bekerja. Kamu berlatih SQL Interview Prep 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 Interview Prep?

Tidak diperlukan pengalaman sebelumnya. SQL Interview Prep 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 1 dari 4.

Berapa lama pelajaran “Anggota Anchor dan Rekursif” 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 Interview Prep ini?

Ya. Setiap pelajaran SQL Interview Prep 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. Anggota Anchor dan Rekursif
  2. Menelusuri Bagan Organisasi
  3. Membuat Deret Angka dan Tanggal
  4. Menghindari Rekursi Tak Terbatas
← Kembali ke SQL Interview Prep