Apa Itu Self JOIN
Gabungkan tabel dengan dirinya sendiri menggunakan alias.
Apa Itu Self JOIN adalah pelajaran SQL Academy 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 Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.
Menggabungkan Tabel dengan Dirinya Sendiri
Penggabungan mandiri adalah ketika Anda menggabungkan sebuah tabel dengan dirinya sendiri. Hal ini mungkin terdengar tidak biasa pada awalnya, tetapi merupakan teknik yang sangat berguna ketika baris dalam satu tabel memiliki hubungan dengan baris lain di tabel yang sama.
Contoh yang paling umum adalah tabel karyawan, yang setiap baris karyawannya juga menyimpan ID manajernya—yang juga merupakan karyawan di tabel yang sama.
Tabel Karyawan
Perhatikan tabel employees, yang setiap barisnya memiliki id, name, dan manager_id yang menunjuk ke baris lain dalam tabel yang sama.
Struktur ini disebut hubungan yang merujuk ke dirinya sendiri atau rekursif. Jalankan kueri di bawah ini untuk membuat dan mengisi tabel tersebut.
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(50),
manager_id INT
);
INSERT INTO employees VALUES
(1, 'Alice', NULL),
(2, 'Bob', 1),
(3, 'Carol', 1),
(4, 'Dave', 2),
(5, 'Eve', 2),
(6, 'Frank', 3);Mengapa Penggabungan Biasa Tidak Berfungsi di Sini
Jika Anda ingin menampilkan setiap karyawan bersama nama manajernya, kedua data tersebut berada di tabel yang sama. Penggabungan biasa menghubungkan dua tabel yang berbeda (atau setidaknya dua sumber yang berbeda).
Untuk membaca tabel yang sama dua kali—sekali untuk karyawan dan sekali untuk manajer—Anda memerlukan penggabungan mandiri yang dipadukan dengan nama alternatif tabel.
Memperkenalkan Nama Alternatif
Untuk melakukan penggabungan mandiri, tuliskan nama tabel yang sama dua kali dalam klausa FROM / JOIN, lalu berikan nama alternatif yang berbeda untuk setiap kemunculannya. Nama alternatif tersebut memungkinkan SQL memperlakukan keduanya sebagai dua tabel logis yang terpisah.
Konvensinya adalah menggunakan nama alternatif yang singkat dan deskriptif, seperti e untuk karyawan dan m untuk manajer.
-- Conceptual structure (not yet a full query)
-- FROM employees AS e
-- JOIN employees AS m ON e.manager_id = m.idPenggabungan Mandiri Pertama Anda
Berikut adalah penggabungan mandiri lengkap yang mencantumkan setiap karyawan beserta nama manajernya. Kondisi ON menghubungkan manager_id milik karyawan dengan id milik manajer.
Alice tidak memiliki manajer, sehingga ia dikecualikan oleh INNER JOIN—tidak ada baris yang cocok di sisi manajer.
SELECT
e.name AS employee,
m.name AS manager
FROM employees AS e
INNER JOIN employees AS m
ON e.manager_id = m.id;Menyertakan Baris Tanpa Manajer
Saat menggunakan INNER JOIN, baris yang tidak memiliki kecocokan akan dihapus. Alice memiliki manager_id = NULL, sehingga ia tidak muncul dalam hasil.
Gantilah dengan LEFT JOIN agar semua karyawan tetap disertakan dan cukup tampilkan NULL (atau sebuah label) ketika tidak ada manajer.
SELECT
e.name AS employee,
COALESCE(m.name, 'No Manager') AS manager
FROM employees AS e
LEFT JOIN employees AS m
ON e.manager_id = m.id;Memfilter Hasil Penggabungan Mandiri
Anda dapat menambahkan klausa WHERE ke penggabungan mandiri, sama seperti pada kueri lainnya. Contoh di bawah ini hanya mengambil karyawan yang manajer langsungnya adalah Alice (ID = 1).
SELECT
e.name AS employee,
m.name AS manager
FROM employees AS e
INNER JOIN employees AS m
ON e.manager_id = m.id
WHERE m.name = 'Alice';Menghitung Bawahan Langsung
Penggabungan mandiri dapat dipadukan secara alami dengan fungsi agregat. Kueri di bawah ini menghitung jumlah bawahan langsung yang dimiliki setiap manajer dengan mengelompokkan berdasarkan nama alternatif manajer.
SELECT
m.name AS manager,
COUNT(e.id) AS direct_reports
FROM employees AS e
INNER JOIN employees AS m
ON e.manager_id = m.id
GROUP BY m.name
ORDER BY direct_reports DESC;Penggabungan Mandiri pada Data Nonhierarkis
Penggabungan mandiri tidak terbatas pada hierarki. Setiap kali baris dalam sebuah tabel memiliki hubungan dengan baris lain di tabel yang sama, penggabungan mandiri dapat membantu.
Contohnya, Anda dapat menemukan semua pasangan karyawan yang memiliki manajer yang sama—dengan menggabungkan tabel dengan dirinya sendiri berdasarkan nilai manager_id yang cocok, sambil memastikan bahwa seorang karyawan tidak dipasangkan dengan dirinya sendiri.
SELECT
a.name AS employee_1,
b.name AS employee_2,
a.manager_id
FROM employees AS a
INNER JOIN employees AS b
ON a.manager_id = b.manager_id
AND a.id < b.id;Peran Nama Alternatif
Nama alternatif wajib digunakan dalam penggabungan mandiri—tanpanya, basis data tidak dapat mengetahui salinan tabel mana yang dirujuk oleh setiap kolom, dan Anda akan mendapatkan galat ambiguitas.
Anda dapat menggunakan nama alternatif apa pun yang Anda inginkan. Aturan utamanya adalah bahwa setiap referensi kolom harus diawali dengan nama alternatif yang benar agar SQL mengetahui instans tabel mana yang harus digunakan.
-- This will fail: column 'name' is ambiguous
-- SELECT name FROM employees JOIN employees ON manager_id = id;
-- This works: aliases remove the ambiguity
SELECT e.name, m.name
FROM employees AS e
JOIN employees AS m ON e.manager_id = m.id;Penerapan di Dunia Nyata
Penggabungan mandiri sering muncul dalam basis data nyata. Penerapan umumnya meliputi:
- Bagan organisasi—karyawan dan manajernya
- Pohon kategori—kategori induk dan anak
- Daftar komponen—komponen yang tersusun dari komponen lain
- Jejaring sosial—menemukan teman dari teman dalam satu tabel koneksi
Mengenali kunci asing yang merujuk ke dirinya sendiri dalam sebuah skema merupakan petunjuk pertama bahwa penggabungan mandiri mungkin diperlukan.
Uji Cepat
Ujilah pemahaman Anda tentang penggabungan mandiri sebelum melanjutkan.
Rangkuman Pelajaran
Dalam pelajaran ini, Anda mempelajari apa itu penggabungan mandiri dan kapan menggunakannya:
- Penggabungan mandiri menghubungkan sebuah tabel dengan dirinya sendiri dengan merujuknya dua kali menggunakan nama alternatif yang berbeda
- Gunakan
INNER JOINuntuk mengecualikan baris tanpa kecocokan (misalnya, manajer tingkat teratas), atauLEFT JOINuntuk tetap menyertakannya - Tambahkan
WHERE,GROUP BY, dan fungsi agregat persis seperti pada penggabungan lainnya - Gunakan
a.id < b.iddalam klausaONuntuk menghindari pasangan duplikat saat membandingkan baris dalam tabel yang sama - Penggabungan mandiri merupakan alat utama untuk data hierarkis, pohon kategori, dan setiap hubungan yang merujuk ke dirinya sendiri
Selanjutnya: menjelajahi hierarki bertingkat dengan CTE rekursif.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Apa Itu Self JOIN” gratis?
Ya — teks lengkap “Apa Itu Self JOIN” 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 “Apa Itu Self JOIN”?
Gabungkan tabel dengan dirinya sendiri menggunakan alias. 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 1 dari 4.
Berapa lama pelajaran “Apa Itu Self JOIN” 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.