0Pricing
SQL Interview Prep · Pelajaran

SELF JOIN untuk Hierarki

Gabungkan tabel dengan dirinya sendiri untuk memodelkan hubungan karyawan-manajer dan induk-anak.

SELF JOIN untuk Hierarki adalah pelajaran SQL Interview Prep gratis di CoddyKit. Ini adalah pelajaran 2 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.

Apa Sebenarnya SELF JOIN Itu

Penggabungan mandiri adalah penggabungan ketika sebuah tabel muncul di kedua sisi. Tidak ada kata kunci khusus SELF JOIN; Anda menulis INNER atau LEFT JOIN biasa dan merujuk tabel yang sama dua kali.

Trik yang membuatnya berhasil adalah alias tabel. Anda memberikan alias yang berbeda kepada setiap salinan agar mesin memperlakukannya sebagai dua tabel yang independen.

SELECT e.name, m.name AS manager
FROM employees e
JOIN employees m ON e.manager_id = m.id;

Mengapa Alias Wajib

Tanpa alias yang berbeda, kueri menjadi ambigu: setiap nama kolom muncul dua kali dan mesin tidak dapat mengetahui salinan yang Anda maksud. Memberi alias pada setiap instans menyelesaikan masalah ini.

Baca penggabungan tersebut sebagai 'pasangkan setiap baris karyawan dengan baris karyawan yang menjadi manajernya.' Alias e adalah karyawan, m adalah manajer, dan keduanya berasal dari tabel fisik yang sama.

-- e = the employee, m = that employee's manager
SELECT e.id, e.name, m.name AS reports_to
FROM employees AS e
JOIN employees AS m ON e.manager_id = m.id;

Model Karyawan-Manajer

Skenario penggabungan mandiri klasik adalah daftar ketetanggaan: satu tabel menyimpan baris, dan setiap baris menunjuk induknya melalui kunci asing ke tabel yang sama.

Tabel employees dengan manager_id yang merujuk ke employees.id memodelkan seluruh struktur organisasi dalam satu tabel. Setiap manajer hanyalah baris karyawan lainnya.

-- One table holds the whole hierarchy
-- employees(id, name, manager_id)
-- manager_id -> employees.id

Menampilkan Semua Orang Beserta Manajernya

Pertanyaan penggabungan mandiri yang paling sering ditanyakan: tampilkan setiap karyawan di samping nama manajernya. Gabungkan salinan karyawan dengan salinan manajer berdasarkan e.manager_id = m.id.

Ini mengembalikan satu baris untuk setiap karyawan yang manajernya ada. Perhatikan bahwa puncak struktur organisasi, yaitu CEO, memiliki nilai NULL untuk ID manajer dan akan dikecualikan oleh penggabungan dalam.

SELECT e.name AS employee, m.name AS manager
FROM employees e
JOIN employees m ON e.manager_id = m.id;

LEFT JOIN untuk Mempertahankan Puncak Pohon

Untuk menyertakan CEO (yang manager_id-nya adalah NULL), beralihlah ke LEFT JOIN. Sisi karyawan dipertahankan; kolom manajer bernilai NULL untuk baris yang tidak memiliki induk.

Pewawancara menggunakan ini untuk menguji apakah Anda ingat bahwa penggabungan mandiri dalam menghilangkan simpul akar. Perbaikannya sama seperti pada situasi penggabungan luar 'pertahankan baris yang tidak cocok' lainnya.

SELECT e.name AS employee,
       COALESCE(m.name, '(top level)') AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;

Menghitung Bawahan Langsung Setiap Manajer

Tindak lanjut yang umum: berapa banyak orang yang melapor langsung kepada setiap manajer? Lakukan penggabungan mandiri, lalu kelompokkan berdasarkan manajer.

Kita menggabungkan karyawan dengan manajer, mengelompokkan berdasarkan identitas manajer, dan menghitung karyawan. Ini hanya menghitung bawahan langsung, bukan seluruh subpohon di bawah mereka.

SELECT m.name AS manager, COUNT(*) AS direct_reports
FROM employees e
JOIN employees m ON e.manager_id = m.id
GROUP BY m.id, m.name
ORDER BY direct_reports DESC;

Menelusuri Dua Tingkat

Untuk mendapatkan seorang karyawan, manajernya, dan manajer dari manajernya, rangkai tiga salinan tabel. Setiap tingkat merupakan penggabungan mandiri lainnya.

Ini berfungsi untuk kedalaman yang tetap dan diketahui. Jika Anda memerlukan kedalaman arbitrer, penggabungan mandiri tidak cukup; itulah petunjuk untuk menggunakan CTE rekursif, yang diharapkan disebutkan oleh pewawancara.

SELECT e.name AS employee,
       m.name AS manager,
       g.name AS grand_manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id
LEFT JOIN employees g ON m.manager_id = g.id;

Penggabungan Mandiri vs CTE Rekursif

Perbedaan utama yang diuji pewawancara:

  • Penggabungan mandiri menangani jumlah tingkat yang tetap. Tiga salinan = tiga tingkat, tidak lebih.
  • CTE rekursif menangani kedalaman tak terbatas dengan menggabungkan ulang tabel dengan dirinya sendiri sampai tidak ada baris baru yang muncul.

Jadi, 'tampilkan setiap karyawan dan manajer langsungnya' adalah penggabungan mandiri, tetapi 'daftarkan setiap leluhur sepanjang rantai' memerlukan rekursi.

Kategori Induk-Anak

Pola yang sama memodelkan pohon apa pun: kategori produk, utas komentar, wilayah geografis. Tabel categories dengan parent_id yang merujuk ke id-nya sendiri identik bentuknya dengan kasus karyawan-manajer.

Mengenali bahwa 'tabel dengan kunci asing yang merujuk ke dirinya sendiri' sama dengan 'penggabungan mandiri atau rekursi' adalah wawasan yang dapat digunakan kembali.

SELECT c.name AS category,
       p.name AS parent_category
FROM categories c
LEFT JOIN categories p ON c.parent_id = p.id;

Kesalahan Umum dalam Penggabungan Mandiri

Perhatikan hal-hal ini dalam wawancara:

  • Lupa memberikan alias, yang menyebabkan kesalahan kolom ambigu.
  • Menggunakan INNER JOIN dan diam-diam menghilangkan baris akar (induk NULL).
  • Menggabungkan dengan arah yang salah: e.id = m.manager_id alih-alih e.manager_id = m.id.

Selalu nyatakan dengan lantang alias mana yang merupakan anak dan mana yang merupakan induk sebelum menulis ON.

Kapan Menggunakan Penggabungan Mandiri

Gunakan penggabungan mandiri setiap kali sebuah tabel menghubungkan baris dengan baris lain dalam tabel yang sama:

  • Hierarki dengan satu tingkat pencarian tetap (karyawan ke manajer).
  • Memasangkan atau membandingkan baris dalam satu tabel (dibahas di pelajaran berikutnya).

Jika relasinya rekursif dan tidak terbatas, sebutkan CTE rekursif sebagai alat yang lebih baik. Nuansa itu membedakan pengembang junior dari pengembang tingkat menengah.

Pemeriksaan Singkat

Uji pemahaman Anda tentang penggabungan mandiri pada hierarki.

Ringkasan: SELF JOIN untuk Hierarki

Poin utama:

  • Penggabungan mandiri adalah penggabungan normal dengan tabel yang sama di kedua sisi, yang dibedakan oleh alias.
  • Daftar ketetanggaan (kunci asing yang merujuk ke diri sendiri seperti manager_id) memodelkan pohon dalam satu tabel.
  • Gunakan INNER JOIN untuk pasangan yang cocok; LEFT JOIN untuk mempertahankan baris akar dengan induk NULL.
  • Penggabungan mandiri menangani kedalaman tetap; penelusuran tak terbatas memerlukan CTE rekursif.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “SELF JOIN untuk Hierarki” gratis?

Ya — teks lengkap “SELF JOIN 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 Interview Prep, upgrade ke CoddyKit PRO. Kursus SQL Interview Prep mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “SELF JOIN untuk Hierarki”?

Gabungkan tabel dengan dirinya sendiri untuk memodelkan hubungan karyawan-manajer dan induk-anak. 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 2 dari 4.

Berapa lama pelajaran “SELF JOIN 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 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. CROSS JOIN dan Produk Kartesius
  2. SELF JOIN untuk Hierarki
  3. Membandingkan Baris dalam Satu Tabel
  4. Memilih Jenis JOIN yang Tepat
← Kembali ke SQL Interview Prep