SQL - Self Join: Panduan Berguna untuk Pemula
Hai sana, penggemar SQL yang sedang berkembang! Saya sangat senang menjadi panduan Anda dalam perjalanan menarik ini ke dunia SQL Self Joins. Sebagai seseorang yang telah mengajar ilmu komputer selama tahun tahun, saya telah melihat banyak "aha!" saat murid-muridku memahami konsep ini. Jadi, mari kita masuk dan buat some SQL magic happen!
Apa Itu Self Join?
Sebelum kita melompat ke hal-hal yang rumit, mari kita mulai dengan analogi sederhana. Bayangkan Anda di pertemuan keluarga, dan Anda ingin membuat daftar semua hubungan orangtua-anak. Anda memiliki satu tabel besar anggota keluarga, tapi Anda perlu menghubungkan orang ke orangtua mereka dalam tabel yang sama. Itu sebenarnya apa yang dilakukan Self Join di SQL!
Self Join adalah saat sebuah tabel dihubungkan dengan dirinya sendiri. Itu seperti tabel itu sedang melihat ke dalam cermin dan menghubungkan dengan refleksnya sendiri. Suara agak membingungkan, kan? Jangan khawatir; semuanya akan bermakna segera!
Mengapa Menggunakan Self Join?
Self Joins sangat berguna saat Anda memiliki data hierarkis atau rekursif dalam satu tabel. Pikirkan tentang:
- Hubungan karyawan-manajer
- Pohon keluarga
- Bagian dan subbagian dalam manufaktur
- Tanggapan thread di forum
Self Join SQL dalam Aksi
mari kita buat contoh sederhana untuk mengilustrasikan bagaimana Self Join bekerja. Kita akan menggunakan tabel karyawan untuk demonstrasi kami.
Pertama, mari kita buat tabel kita:
CREATE TABLE karyawan (
employee_id INT PRIMARY KEY,
name VARCHAR(50),
manager_id INT
);
INSERT INTO karyawan (employee_id, name, manager_id)
VALUES
(1, 'John Doe', NULL),
(2, 'Jane Smith', 1),
(3, 'Bob Johnson', 1),
(4, 'Alice Brown', 2),
(5, 'Charlie Davis', 2);
Sekarang, mari kita katakan bahwa kita ingin mencantumkan setiap karyawan beserta nama manajer mereka. Ini tempat Self Join sangat berguna:
SELECT
e1.name AS karyawan,
e2.name AS manajer
FROM
karyawan e1
LEFT JOIN
karyawan e2 ON e1.manager_id = e2.employee_id;
mari kitauraikan query ini:
- Kita sedang mencantumkan tabel
karyawan
dua kali, memberinya aliase1
dane2
. -
e1
mewakili karyawan, dane2
mewakili manajer potensial. - Kita hubungkan "dua" tabel ini dengan syarat
e1
'smanager_id
sama dengane2
'semployee_id
. - Kita menggunakan LEFT JOIN untuk memastikan kita mendapatkan semua karyawan, bahkan mereka tanpa manajer.
Hasilnya akan tampak seperti ini:
karyawan | manajer |
---|---|
John Doe | NULL |
Jane Smith | John Doe |
Bob Johnson | John Doe |
Alice Brown | Jane Smith |
Charlie Davis | Jane Smith |
Apakah itu menarik? Dengan hanya satu query, kita telah memetakan seluruh struktur manajemen perusahaan kecil kita!
Self Join dengan Klausul ORDER BY
Sekarang, mari kita tambahkan sedikit perasaan ke query kita dengan mengurutkan hasilnya. Kita mungkin ingin melihat karyawan yang diurutkan secara alfabetik:
SELECT
e1.name AS karyawan,
e2.name AS manajer
FROM
karyawan e1
LEFT JOIN
karyawan e2 ON e1.manager_id = e2.employee_id
ORDER BY
e1.name ASC;
Query ini identik dengan query sebelumnya, kecuali untuk penambahan klausul ORDER BY
di akhir. Itu mengurutkan hasil kita secara alfabetik menurut nama karyawan.
Hasilnya sekarang akan tampak seperti ini:
karyawan | manajer |
---|---|
Alice Brown | Jane Smith |
Bob Johnson | John Doe |
Charlie Davis | Jane Smith |
Jane Smith | John Doe |
John Doe | NULL |
Lebih baik! Sekarang kita dapat mudah menemukan setiap karyawan dan manajer mereka.
Teknik Self Join Tingkat Lanjut
Siap untuk naik tingkat? Mari kita coba sesuatu yang sedikit lebih kompleks. Apa bila kita ingin menemukan karyawan yang memiliki manajer yang sama?
SELECT
e1.name AS karyawan1,
e2.name AS karyawan2,
m.name AS manajer_common
FROM
karyawan e1
JOIN
karyawan e2 ON e1.manager_id = e2.manager_id AND e1.employee_id < e2.employee_id
JOIN
karyawan m ON e1.manager_id = m.employee_id;
Query ini mungkin terlihat menakutkan, tapi mari kitauraikan:
- Kita mencantumkan tabel
karyawan
dengan dirinya sendiri dua kali (e1 dan e2) untuk membandingkan karyawan. - Syarat
e1.employee_id < e2.employee_id
memastikan kita tidak mendapat pasangan duplikat (seperti "Alice dan Bob" dan "Bob dan Alice"). - Kita mencantumkan untuk ketiga kalinya (m) untuk mendapatkan nama manajer.
Hasilnya mungkin tampak seperti ini:
karyawan1 | karyawan2 | manajer_common |
---|---|---|
Jane Smith | Bob Johnson | John Doe |
Alice Brown | Charlie Davis | Jane Smith |
Dan begitu juga! Kita telah menemukan karyawan yang memiliki manajer yang sama.
Kesimpulan
Self Joins mungkin tampak sulit pada awalnya, tapi mereka adalah alat yang sangat kuat dalam peralatan SQL Anda. Mereka memungkinkan Anda untuk mengquery data hierarkis secara efisien dan mengungkapkan hubungan dalam tabel tunggal.
Ingat, latihan membuat sempurna! Cobalah membuat tabel Anda sendiri dan eksperimen dengan berbagai query Self Join. Sebelum Anda tahu, Anda akan menjadi pro Self Joining!
Semangat menanyakan, para master SQL masa depan! Dan ingat, di dunia basis data, sungguh saja baik untuk berbicara kepada dirimu sendiri... Saya mean, mencantumkan dengan dirimu sendiri!
Credits: Image by storyset