Karyawan dan Manajer
Contoh hierarki klasik.
Karyawan dan Manajer adalah pelajaran SQL Academy 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 Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.
Apa Itu Penggabungan Mandiri
Penggabungan mandiri adalah ketika sebuah tabel digabungkan dengan dirinya sendiri. Hal ini terdengar tidak biasa, tetapi sangat berguna ketika baris dalam sebuah tabel memiliki hubungan dengan baris lain di tabel yang sama.
Contoh klasiknya adalah tabel karyawan, yang setiap karyawannya mungkin memiliki seorang manajer—dan manajer tersebut juga merupakan karyawan yang tersimpan di tabel yang sama.
Tabel Karyawan
Mari kita buat tabel employees sederhana. Setiap karyawan memiliki id, name, dan manager_id yang menunjuk kembali ke baris lain dalam tabel yang sama.
Ketika manager_id bernilai NULL, karyawan tersebut tidak memiliki manajer—ia berada di puncak hierarki (misalnya, CEO).
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
manager_id INT REFERENCES employees(id)
);Memasukkan Data Contoh
Mari kita isi tabel dengan hierarki perusahaan kecil. Alice adalah CEO (tidak memiliki manajer). Bob dan Carol sama-sama melapor kepada Alice. Dave dan Eve melapor kepada Bob.
INSERT INTO employees (id, name, manager_id) VALUES
(1, 'Alice', NULL),
(2, 'Bob', 1),
(3, 'Carol', 1),
(4, 'Dave', 2),
(5, 'Eve', 2),
(6, 'Frank', 3);Mengkueri Tanpa Penggabungan
Jika kita hanya memilih semua baris, kita akan melihat angka manager_id mentah—bukan nama manajer. Hal ini sulit dibaca dan tidak berguna bagi pengguna akhir.
SELECT id, name, manager_id
FROM employees;Menulis Penggabungan Mandiri
Untuk menampilkan nama manajer di samping setiap karyawan, kita menggabungkan tabel employees dengan dirinya sendiri. Kita memberikan nama alternatif yang berbeda untuk setiap salinan: e untuk karyawan dan m untuk manajer.
Kondisi penggabungan menghubungkan manager_id milik karyawan dengan id milik manajer.
SELECT
e.name AS employee,
m.name AS manager
FROM employees e
JOIN employees m ON e.manager_id = m.id;Menyertakan Karyawan Tanpa Manajer
INNER JOIN di atas menyembunyikan Alice karena manager_id-nya bernilai NULL—tidak ada baris yang cocok di sisi kanan. Untuk menyertakan semua orang (termasuk karyawan tingkat teratas), gunakan LEFT JOIN.
Alice akan muncul dengan nilai NULL pada kolom manajer.
SELECT
e.name AS employee,
m.name AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;Menggunakan COALESCE agar Lebih Mudah Dibaca
Nilai NULL pada kolom manajer dapat membingungkan. Kita dapat menggunakan COALESCE untuk mengganti NULL dengan label yang mudah dipahami seperti 'Tanpa Manajer', sehingga keluaran untuk laporan menjadi lebih rapi.
SELECT
e.name AS employee,
COALESCE(m.name, 'No Manager') AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id
ORDER BY manager, employee;Menemukan Bawahan Langsung
Kita dapat membalik kueri untuk menanyakan: siapa yang melapor kepada manajer tertentu? Ini disebut menemukan bawahan langsung. Di sini kita menemukan semua karyawan yang melapor langsung kepada Alice (ID = 1).
SELECT e.name AS direct_report
FROM employees e
WHERE e.manager_id = 1;Menghitung Bawahan per Manajer
Menggabungkan penggabungan mandiri dengan GROUP BY dan COUNT memungkinkan kita melihat jumlah bawahan langsung yang dimiliki setiap manajer. Hal ini berguna untuk menganalisis beban kerja.
SELECT
m.name AS manager,
COUNT(e.id) AS direct_reports
FROM employees e
JOIN employees m ON e.manager_id = m.id
GROUP BY m.name
ORDER BY direct_reports DESC;Dua Tingkat Hierarki
Untuk melihat dua tingkat hierarki sekaligus—karyawan, manajernya, dan manajer dari manajernya—kita dapat menggabungkan tabel tersebut untuk ketiga kalinya. Setiap penggabungan menambahkan satu tingkat hierarki lagi.
SELECT
e.name AS employee,
m.name AS manager,
gm.name AS grand_manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id
LEFT JOIN employees gm ON m.manager_id = gm.id;Batasan Penggabungan Mandiri
Penggabungan mandiri bekerja dengan baik untuk hierarki tetap yang dangkal (1–3 tingkat). Jika kedalamannya tidak diketahui atau tidak terbatas—seperti bagan organisasi perusahaan yang dapat mencapai kedalaman 10 tingkat—Anda memerlukan CTE rekursif.
Untuk sebagian besar kueri praktis tentang karyawan dan manajer, pendekatan penggabungan mandiri yang dibahas dalam pelajaran ini merupakan alat yang tepat.
Uji Cepat
Ujilah pemahaman Anda tentang penggabungan mandiri dan hierarki karyawan-manajer.
Rangkuman Pelajaran
Dalam pelajaran ini, Anda mempelajari cara menggunakan penggabungan mandiri untuk memodelkan dan mengkueri hierarki karyawan-manajer klasik yang disimpan dalam satu tabel.
Inti pelajaran:
- Penggabungan mandiri menggabungkan sebuah tabel dengan dirinya sendiri menggunakan dua nama alternatif yang berbeda.
- Kondisi penggabungan menghubungkan
manager_iddenganiddalam tabel yang sama. - Gunakan INNER JOIN untuk hanya melihat karyawan yang memiliki manajer, dan LEFT JOIN untuk menyertakan semua orang.
- COALESCE dapat mengganti nilai NULL pada manajer dengan label yang mudah dipahami.
- Untuk hierarki dengan kedalaman tidak terbatas, pertimbangkan CTE rekursif.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Karyawan dan Manajer” gratis?
Ya — teks lengkap “Karyawan dan Manajer” 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 “Karyawan dan Manajer”?
Contoh hierarki klasik. 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 2 dari 4.
Berapa lama pelajaran “Karyawan dan Manajer” 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
- Apa Itu Self JOIN
- Karyawan dan Manajer
- Membandingkan Baris dalam Tabel yang Sama
- Batasan Self JOIN