Penjelasan sederhana
FULL OUTER JOIN menampilkan semua baris dari kedua tabel. Yang punya pasangan digabung jadi satu baris; yang tidak punya pasangan tetap muncul, dengan kolom dari tabel satunya berisi NULL.
Ini cocok untuk membandingkan dua daftar dan melihat semua perbedaannya sekaligus: mana yang ada di kedua daftar, mana yang hanya ada di daftar A, dan mana yang hanya ada di daftar B.
Sintaks
SELECT a.kolom, b.kolom
FROM tabel_a AS a
FULL OUTER JOIN tabel_b AS b
ON a.kunci = b.kunci;
| Bagian | Keterangan |
|---|---|
FULL OUTER | Gabungan hasil LEFT JOIN dan RIGHT JOIN. |
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 FULL OUTER JOIN
Data contoh: karyawan, departemen
Tabel karyawan
| id | nama | dept_id | kota | gaji | tgl_masuk | atasan_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 |
Tabel departemen
| id | nama_dept | lokasi |
|---|---|---|
| 1 | Keuangan | Jakarta |
| 2 | Marketing | Jakarta |
| 3 | IT | Bandung |
| 4 | Legal | Surabaya |
SELECT k.nama, d.nama_dept
FROM karyawan AS k
FULL OUTER JOIN departemen AS d
ON k.dept_id = d.id;
Hasil 9 baris
| nama | nama_dept |
|---|---|
| Andi Pratama | IT |
| Bunga Lestari | Keuangan |
| Candra Wijaya | IT |
| Dewi Anggraini | Marketing |
| Eko Saputra | Keuangan |
| Fajar Nugroho | Marketing |
| Gita Permata | IT |
| Hendra Gunawan | NULL |
| NULL | Legal |
Hendra dan departemen Legal sama-sama muncul, masing-masing dengan pasangan NULL.
Cara kerjanya, langkah demi langkah
- Setiap karyawan dicocokkan dengan departemennya, seperti
INNER JOIN. Ada 7 pasangan. - Hendra yang tidak punya departemen tetap ditambahkan, dengan nama_dept NULL.
- Legal yang tidak punya karyawan juga ditambahkan, dengan nama NULL.
- Hasilnya 9 baris: 7 pasangan ditambah 2 baris tanpa pasangan.
Dipakai untuk apa di kantor?
- Rekonsiliasi data, misalnya membandingkan data penjualan dari sistem kasir dan sistem gudang.
- Membandingkan daftar peserta yang mendaftar dan yang hadir.
Kesalahan yang sering terjadi
- Memakainya di MySQL. MySQL tidak punya
FULL OUTER JOIN; gantinya gabungkanLEFT JOINdanRIGHT JOINdenganUNION.
SELF JOIN