Implementasi Self Join Tabel Database

Database adalah kumpulan informasi yang tersimpan dalam sebuah sistem komputer yang terstruktur dan terorganisir dengan baik. Database dapat digunakan untuk menyimpan berbagai jenis informasi seperti data pelanggan, inventaris, informasi keuangan, dan banyak lagi. Salah satu fitur utama dari database (relational database) adalah kemampuannya untuk melakukan operasi join, di mana tabel-tabel dalam database dapat digabungkan untuk menghasilkan informasi yang lebih lengkap dan terstruktur. Salah satu jenis join yang sering digunakan dalam database adalah self join.

Definisi Self Join

Self join terjadi ketika kita menggabungkan sebuah tabel dengan dirinya sendiri. Hal ini biasanya dilakukan ketika kita ingin mencari informasi tentang entitas yang terkait dengan entitas yang sama. Sebagai contoh, misalkan kita memiliki tabel yang berisi data karyawan dan setiap karyawan memiliki kolom “atasan langsung” yang menunjukkan siapa yang menjadi bos mereka. Dalam kasus ini, kita dapat menggunakan self join untuk menemukan informasi tentang atasan langsung dari setiap karyawan.

Perhatikan struktur organisasi berikut:

Pada gambar di atas terlihat bahwa terdapat beberapa posisi pada suatu perusahaan, dimulai yang paling tinggi yaitu Direktur Utama sampai pada posisi jabatan terendah yaitu Divisi Pemasaran, Divisi, dan Divisi Produksi. Divisi Pemasaran memiliki atasan langsung yaitu Manager Pemasaran. Kemudian Manager Pemasaran juga memiliki atasan langsung yang berposisi sebagai Direktur, dan Direktur memiliki atas langsung berposisi Direktur Utama.

Kesemua orang yang menduduki jabatan itu merupakan seorang karyawan sehingga untuk merancang tabel database yang dapat menunjukkan “seorang karyawan memiliki atasan langsung seorang karyawan lain” cukup dibuatkan satu tabel karyawan saja yang nanti akan kita lakukan self join (join terhadap tabel itu sendiri).

Merancang Tabel Database

Pada contoh ini kita akan melengkapi struktur organisasi pada gambar dengan menentukan nama-nama karyawan pada tiap posisinya. Kita dapat membuat satu tabel karyawan yang berisi id, nama, dan jabatan karyawan tersebut ditambah dengan parent_id sebagai penunjuk id atasannya. Tabel karyawan dapat memiliki struktur sebagai berikut:

-- Membuat tabel karyawan
CREATE TABLE karyawan (
    id INT NOT NULL,
    parent_id INT NULL,
    nama VARCHAR(25) NOT NULL,
    jabatan VARCHAR(50) NOT NULL,
    PRIMARY KEY(id)
);

Memasukkan Sampel Data

Selanjutnya kita akan coba masukkan beberapa sampel data secara bulk insert, agar nantinya dapat kita lakukan proses self join-nya.

-- Memasukkan data secara bulk
INSERT INTO karyawan VALUES 
(1, null, 'Adi Putra', 'Direktur Utama'),
(2, 1, 'Budi Santoso', 'Direktur'),
(3, 2, 'Cindy Saputri', 'Manager Pemasaran'),
(4, 2, 'Dodi Mulyadi', 'Manager'),
(5, 2, 'Evita Mala', 'Manager Produksi'),
(6, 3, 'Fani', 'Divisi Pemasaran'),
(7, 4, 'Ghofur', 'Divisi'),
(8, 5, 'Intan', 'Divisi Produksi');

Jika diperhatikan, hanya ada satu karyawan yang memiliki nilai null untuk kolom parent_id, hal ini dimaksudkan bahwa data tersebut (Adi Putra) tidak memiliki atasan. Selain Adi Putra, semua karyawan memiliki atasan seperti Budi Santoso yang memiliki atasan bernama Adi Putra (parent_id pada baris data Budi Santoso adalah 1. 1 merupakan ID karyawan bernama Adi Putra).

Untuk memastikan bahwa semua data sudah berhasil ditambahkan, kita akan menampilkannya terlebih dahulu.

-- Tampilkan seluruh data dari tabel karyawan
SELECT * FROM karyawan;

Hasilnya dapat dilihat pada gambar berikut:

Melakukan Self Join

Selanjutnya kita akan coba untuk melakukan self join sehingga akan diketahui siapa memiliki atasan langsung bernama siapa. Jalankan query berikut:

-- Self join untuk mengetahui karyawan beserta atasannya
SELECT a.nama, a.jabatan, CONCAT(b.nama, ' (', b.jabatan, ') ') AS atasan
FROM karyawan a 
JOIN karyawan b 
WHERE a.parent_id = b.id;

Hasil query di atas dapat dilihat pada gambar berikut:

Terlihat bahwa Budi Santoso yang jabatannya Direktur memiliki atasan bernama Adi Putra (Direktur Utama), dan seterusnya.

Sampai disini proses join tabel karyawan dengan dirinya sendiri (self join) sudah berhasil dilakukan. Semoga tulisan ini bermanfaat bagi para pembaca. Terima kasih.

Scroll to Top