FULL OUTER JOIN di SQL

Menampilkan semua baris dari kedua tabel. Yang tidak punya pasangan diisi NULL di sisi lainnya.

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;
BagianKeterangan
FULL OUTERGabungan 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

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

Tabel departemen

idnama_deptlokasi
1 Keuangan Jakarta
2 Marketing Jakarta
3 IT Bandung
4 Legal Surabaya
query.sql
SELECT k.nama, d.nama_dept
FROM karyawan AS k
FULL OUTER JOIN departemen AS d
  ON k.dept_id = d.id;
>_ Jalankan & ubah query ini di browser

Hasil 9 baris

namanama_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

  1. Setiap karyawan dicocokkan dengan departemennya, seperti INNER JOIN. Ada 7 pasangan.
  2. Hendra yang tidak punya departemen tetap ditambahkan, dengan nama_dept NULL.
  3. Legal yang tidak punya karyawan juga ditambahkan, dengan nama NULL.
  4. 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 gabungkan LEFT JOIN dan RIGHT JOIN dengan UNION.
Progres bab Gabung Tabel (JOIN) 0/7 dipelajari
Lanjut: SELF 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