ID (Indonesia) Terjemahan

SQL - Self Join: Panduan Ramah untuk Pemula

Halo teman-teman yang sedang belajar SQL! Saya sangat senang menjadi panduan Anda dalam perjalanan menarik ini ke dunia SQL Self Joins. Sebagai seseorang yang telah mengajar ilmu komputer selama bertahun-tahun, saya telah melihat banyak "waktu 'aha!'" saat murid-muridku memahami konsep ini. Jadi, mari kita masuk dan buat sedikit magi SQL!

SQL - Self Join

Apa Itu Self Join?

Sebelum kita masuk ke detailnya, mari kita mulai dengan analogi sederhana. Bayangkan Anda di acara reuni 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 dalam SQL!

Self Join adalah saat sebuah tabel dihubungkan dengan dirinya sendiri. Itu seperti tabel itu sedang mencari refleksnya sendiri dan menghubungkannya. Suara agak aneh, kan? Jangan khawatir; semua akan bermakna segera!

Mengapa Menggunakan Self Join?

Self Joins sangat berguna saat Anda memiliki data hierarkis atau rekursif dalam satu tabel. Pikirkan tentang:

  1. Hubungan karyawan-manajer
  2. Pohon keluarga
  3. Bagian dan subbagian dalam manufaktur
  4. Tanggapan thread di forum

Self Join dalam Aksi SQL

Ayo buat contoh sederhana untuk mengilustrasikan bagaimana Self Join bekerja. Kita akan menggunakan tabel karyawan untuk demonstrasi ini.

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 kita ingin mencantumkan setiap karyawan beserta nama manajer mereka. Ini tempat Self Join 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 permintaan ini:

  1. Kita memilih dari tabel karyawan dua kali, memberikan alias e1 dan e2.
  2. e1 mewakili karyawan, dan e2 mewakili manajer potensial.
  3. Kita menggabungkan "dua" tabel ini berdasarkan syarat bahwa e1's manager_id sama dengan e2's employee_id.
  4. Kita menggunakan LEFT JOIN untuk memastikan kita mendapatkan semua karyawan, bahkan mereka yang 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

Bagus bukan? Dengan hanya satu permintaan, kita telah memetakan seluruh struktur manajemen perusahaan kecil kita!

Self Join dengan Clause ORDER BY

Sekarang, ayo tambahkan sedikit perisa ke permintaan kita dengan mengurutkan hasilnya. Mungkin kita 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;

Permintaan ini identik dengan permintaan sebelumnya, kecuali untuk penambahan clause 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

Jauh lebih baik! Sekarang kita dapat mudah mencari setiap karyawan dan manajer mereka.

Teknik Self Join Tingkat Lanjut

Siap untuk naik tingkat? Ayo mencoba 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_bersama
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;

Permintaan ini mungkin terlihat menakutkan, tapi mari kitauraikan:

  1. Kita menggabungkan tabel karyawan dengan dirinya sendiri dua kali (e1 dan e2) untuk membandingkan karyawan.
  2. Syarat e1.employee_id < e2.employee_id memastikan kita tidak mendapatkan pasangan duplikat (seperti "Alice dan Bob" serta "Bob dan Alice").
  3. Kita menggabungkan untuk ketiga kalinya (m) untuk mendapatkan nama manajer.

Hasilnya mungkin tampak seperti ini:

karyawan1 karyawan2 manajer_bersama
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 mengungkap hubungan dalam tabel tunggal.

Ingat, latihan membuat sempurna! Cobalah membuat tabel Anda sendiri dan eksperimen dengan berbagai permintaan Self Join. Sebelum Anda sadari, Anda akan menjadi ahli Self Join!

Semoga sukses menquery, para ahli SQL masa depan! Dan ingat, di dunia basis data, baiklah untuk berbicara kepada diri sendiri... Saya mean, bergabung dengan diri sendiri!

Credits: Image by storyset