SELF JOIN di SQL

Menggabungkan tabel dengan dirinya sendiri, misalnya untuk mencari atasan setiap karyawan di tabel yang sama.

Penjelasan sederhana

Self join artinya menggabungkan tabel dengan dirinya sendiri. Ini dipakai kalau satu tabel menyimpan hubungan antarbarisnya sendiri, misalnya kolom atasan_id yang berisi id karyawan lain di tabel yang sama.

Caranya, tabel yang sama dipakai dua kali dengan dua nama panggilan berbeda. Anggap saja kamu memfotokopi daftar karyawan: salinan pertama dibaca sebagai "karyawan", salinan kedua sebagai "atasan".

Sintaks

SELECT a.kolom, b.kolom
FROM tabel AS a
JOIN tabel AS b
  ON a.kolom_relasi = b.kunci;
BagianKeterangan
alias berbedaTabel yang sama dipakai dua kali, jadi wajib diberi dua alias.

Tanda [kurung siku] berarti bagian opsional. Kata kunci SQL tidak membedakan huruf besar-kecil, tapi menulisnya dengan huruf besar membuat query lebih mudah dibaca.

Contoh SELF JOIN

Data contoh: karyawan

Tabel karyawan

idnamadept_idkotagajitgl_masukatasan_id
1 Andi Pratama 3 Bandung 12500000 2019-03-11 NULL
2 Bunga Lestari 1 Jakarta 9800000 2020-07-01 NULL
3 Candra Wijaya 3 Bandung 8200000 2021-02-15 1
4 Dewi Anggraini 2 Jakarta 7500000 2022-05-09 6
5 Eko Saputra 1 Jakarta 6900000 2023-01-16 2
6 Fajar Nugroho 2 Surabaya 11000000 2018-09-03 NULL
7 Gita Permata 3 Jakarta 8200000 2023-08-21 1
8 Hendra Gunawan NULL Medan 5500000 2024-04-02 NULL
query.sql
SELECT k.nama AS karyawan,
       a.nama AS atasan
FROM karyawan AS k
JOIN karyawan AS a
  ON k.atasan_id = a.id;
>_ Jalankan & ubah query ini di browser

Hasil 4 baris

karyawanatasan
Candra Wijaya Andi Pratama
Dewi Anggraini Fajar Nugroho
Eko Saputra Bunga Lestari
Gita Permata Andi Pratama

Kolom atasan_id dicocokkan ke id di salinan tabel yang sama.

Cara kerjanya, langkah demi langkah

  1. FROM karyawan AS k: salinan pertama dibaca sebagai daftar karyawan.
  2. JOIN karyawan AS a: salinan kedua dibaca sebagai daftar atasan.
  3. ON k.atasan_id = a.id: atasan_id setiap karyawan dicocokkan dengan id di salinan atasan. Candra punya atasan_id 1, jadi dipasangkan dengan Andi (id 1).
  4. Karyawan yang atasan_id-nya kosong (Andi, Bunga, Fajar, Hendra) tidak punya pasangan dan tidak muncul. Hasilnya 4 baris.

Dipakai untuk apa di kantor?

  • Menampilkan struktur organisasi: siapa melapor ke siapa.
  • Mencari pasangan data di tabel yang sama, misalnya pelanggan dari kota yang sama.

Kesalahan yang sering terjadi

  • Lupa memberi alias berbeda untuk kedua salinan. Database tidak bisa membedakan kolom mana milik salinan yang mana.
Progres bab Gabung Tabel (JOIN) 0/7 dipelajari
Lanjut: CROSS JOIN

Belajar SQL bareng mentor

Hafal sintaks itu mudah. Menjawab pertanyaan bisnis, itu skill.

Private Class Python & SQL untuk Data: dari query dasar sampai JOIN dan studi kasus kerja, dengan kurikulum dan jadwal yang menyesuaikan kamu.

Lihat Private Class