Apa itu Self Join dalam SQL
Self join dalam SQL adalah technique yang kuat untuk mengelola dan menganalisis struktur data yang kompleks. Ini melibatkan penggabungan tabel dengan dirinya sendiri, menciptakan hubungan self-referential antara data. Ini memungkinkan analisis data yang lebih efisien dan komprehensif, terutama saat menangani data hierarkis.
Dalam self join, tabel diberi dua alias atau nama yang berbeda, yang digunakan untuk merujuk pada tabel yang sama. Alias pertama mewakili tabel asli, sementara alias kedua mewakili salinan dari tabel asli. Dengan menggabungkan kedua alias ini pada kolom yang sama, kita dapat membandingkan dan kontras data dalam tabel yang sama, seolah-olah itu adalah dua tabel terpisah.
Self join dapat dilakukan menggunakan berbagai jenis operasi join, termasuk inner join, left join, right join, dan full outer join. Setiap operasi ini memiliki karakteristik yang unik dan digunakan untuk tujuan yang berbeda.
Contoh Self Join dalam SQL
Berikut adalah contoh self join dalam SQL, bersama dengan tabel sampel, kode, dan output.
Manajemen Data Hirarkis
Pertimbangkan skenario di mana Anda memiliki tabel karyawan dengan kolom untuk ID karyawan, nama, dan ID manajer. Anda ingin membuat laporan yang menampilkan nama semua karyawan beserta nama manajer mereka masing-masing. Anda dapat menggunakan self join untuk menyelesaikan tugas ini.
Employee ID | Employee Name | Manager ID |
---|---|---|
1 | John | 2 |
2 | Mary | 3 |
3 | Peter | NULL |
4 | Sarah | 3 |
5 | Tom | 2 |
SELECT e.Employee_Name, m.Employee_Name as Manager_Name
FROM Employee e
INNER JOIN Employee m ON e.Manager_ID = m.Employee_ID
Output akan terlihat seperti ini:
Employee Name | Manager Name |
---|---|
John | Mary |
Sarah | Peter |
Tom | Mary |
Mary | Peter |
Terlihat output ini menampilkan nama dari setiap pelanggan beserta nama pelanggan yang mereferensikan mereka.
Mencari Hubungan Antara Data
Misalkan Anda memiliki tabel pelanggan dengan kolom untuk ID pelanggan, nama, dan ID referensi. Anda ingin membuat laporan yang menampilkan nama semua pelanggan bersama dengan nama pelanggan yang merujuk mereka. Anda dapat menggunakan self join untuk menyelesaikan tugas ini.
Customer ID | Customer Name | Referral ID |
---|---|---|
1 | John | NULL |
2 | Mary | 1 |
3 | Peter | 2 |
4 | Sarah | 3 |
5 | Tom | 1 |
SELECT c.Customer_Name, r.Customer_Name as Referral_Name
FROM Customer c
LEFT JOIN Customer r ON c.Referral_ID = r.Customer_ID
Output akan terlihat seperti ini:
Customer Name | Referral Name |
---|---|
John | NULL |
Mary | John |
Peter | Mary |
Sarah | Peter |
Tom | John |
Output ini menunjukkan nama setiap pelanggan bersama dengan nama pelanggan yang merujuk mereka, jika berlaku.
Menganalisis Struktur Data yang Kompleks
Misalkan Anda memiliki tabel penjualan dengan kolom untuk ID penjualan, tanggal, ID produk, dan ID pelanggan. Anda ingin membuat laporan yang menampilkan total jumlah penjualan untuk setiap pelanggan untuk setiap produk. Anda dapat menggunakan self join untuk menyelesaikan tugas ini.
Sales ID | Date | Product ID | Customer ID |
---|---|---|---|
1 | 2022-01-01 | 1 | 1 |
2 | 2022-01-01 | 1 | 2 |
3 | 2022-01-01 | 2 | 1 |
4 | 2022-01-01 | 2 | 2 |
5 | 2022-01-01 | 1 | 3 |
SELECT c.Customer_ID, p.Product_ID, COUNT(*) as Total_Sales
FROM Sales s
INNER JOIN Customer c ON s.Customer_ID = c.Customer_ID
INNER JOIN Sales s2 ON s.Product_ID = s2.Product_ID AND s.Customer_ID = s2.Customer_ID
INNER JOIN Product p ON s.Product_ID = p.Product_ID
GROUP BY c.Customer_ID, p.Product_ID
Output akan terlihat seperti ini:
Customer ID | Product ID | Total Sales |
---|---|---|
1 | 1 | 1 |
1 | 2 | 1 |
2 | 1 | 1 |
2 | 2 | 1 |
3 | 1 | 1 |
Output ini menunjukkan total jumlah penjualan untuk setiap pelanggan untuk setiap produk. Self join memungkinkan kita untuk membandingkan dan membedakan data dalam tabel yang sama, sehingga memudahkan untuk menganalisis struktur data yang kompleks.