Self JOIN & CROSS JOIN: Tabel yang Berhubungan dengan Dirinya Sendiri

Menggabungkan tabel dengan dirinya sendiri untuk struktur atasan–bawahan, memakai alias berbeda, dan mengenal CROSS JOIN untuk membuat semua kombinasi.

Part 27 dari 38 ± 35 menit Gratis

Ketika sebuah tabel menunjuk dirinya sendiri

Lihat tabel karyawan berikut. Kolom atasan_id berisi id karyawan lain di tabel yang sama:

idnamajabatanatasan_id
1Rina WijayaDirekturNULL
2Bagas PrakosoManajer Operasional1
4Dimas AnggaraBarista2

Dimas atasannya Bagas (id 2); Bagas atasannya Rina (id 1); Rina tidak punya atasan (NULL). Untuk menampilkan nama atasan, kita JOIN tabel itu dengan dirinya sendiri. Triknya: beri dua alias berbeda pada tabel yang sama, seolah-olah dua tabel terpisah.

SELECT k.nama   AS karyawan,
       a.nama   AS atasan
FROM karyawan k
LEFT JOIN karyawan a ON a.id = k.atasan_id;
  • k = peran sebagai "karyawan" (anak), a = peran sebagai "atasan" (induk).
  • Kondisi: id atasan (a.id) sama dengan atasan_id si karyawan (k.atasan_id).
  • Kenapa LEFT? Rina tidak punya atasan; dengan INNER JOIN ia akan hilang dari daftar.
+----------------+---------------+
| karyawan       | atasan        |
+----------------+---------------+
| Rina Wijaya    | NULL          |
| Bagas Prakoso  | Rina Wijaya   |
| Citra Dewi     | Rina Wijaya   |
| Dimas Anggara  | Bagas Prakoso |
...

Pola ini dipakai untuk: struktur organisasi, kategori bersarang (kategori induk–anak), komentar yang dibalas komentar lain, dan silsilah keluarga.

Contoh lain: mencari pasangan dalam satu tabel

-- pasangan karyawan yang gajinya sama (tanpa pasangan dengan dirinya sendiri / duplikat terbalik)
SELECT a.nama, b.nama, a.gaji
FROM karyawan a
JOIN karyawan b ON a.gaji = b.gaji AND a.id < b.id;

CROSS JOIN: semua kemungkinan kombinasi

SELECT p.nama AS produk, u.ukuran
FROM produk p
CROSS JOIN (SELECT 'S' AS ukuran UNION SELECT 'M' UNION SELECT 'L') u;

CROSS JOIN memasangkan setiap baris kiri dengan setiap baris kanan (hasil = m × n baris). Tidak ada ON. Berguna untuk membuat kombinasi (produk × ukuran, tanggal × cabang), tetapi pada tabel besar bisa meledak, jadi pakailah dengan sengaja.

Cross join yang tidak disengaja terjadi saat kamu lupa kondisi ON atau menulis FROM a, b tanpa WHERE: tabel 10.000 × 10.000 baris menghasilkan 100 juta baris dan bisa melumpuhkan server.

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X