Perintah FULL JOIN

📚 Pengenalan Perintah FULL JOIN

FULL JOIN mengembalikan semua baris ketika ada kecocokan di salah satu tabel. Ini adalah kombinasi dari LEFT JOIN dan RIGHT JOIN, mengembalikan semua baris dari kedua tabel.

Sintaks FULL JOIN

Sintaks untuk FULL JOIN adalah:

SELECT tabel1.kolom1, tabel2.kolom2, ...
FROM tabel1
FULL JOIN tabel2
ON tabel1.kolom_kunci = tabel2.kolom_kunci;

Atau dengan kata kunci OUTER (opsional):

SELECT tabel1.kolom1, tabel2.kolom2, ...
FROM tabel1
FULL OUTER JOIN tabel2
ON tabel1.kolom_kunci = tabel2.kolom_kunci;

Contoh Tabel

Misalkan kita memiliki dua tabel berikut:

Tabel 'pelanggan'

id nama email
1 John Doe john@example.com
2 Jane Smith jane@example.com
3 Bob Johnson bob@example.com

Tabel 'pesanan'

id pelanggan_id tanggal jumlah
101 2 2023-01-15 150000
102 1 2023-01-20 200000
103 2 2023-02-05 75000
104 4 2023-02-10 300000

Contoh FULL JOIN

Untuk menggabungkan tabel 'pelanggan' dan 'pesanan' berdasarkan id pelanggan:

SELECT pelanggan.nama, pesanan.tanggal, pesanan.jumlah
FROM pelanggan
FULL JOIN pesanan
ON pelanggan.id = pesanan.pelanggan_id;

Hasilnya akan menjadi:

nama tanggal jumlah
John Doe 2023-01-20 200000
Jane Smith 2023-01-15 150000
Jane Smith 2023-02-05 75000
Bob Johnson NULL NULL
NULL 2023-02-10 300000

Perhatikan bahwa:

FULL JOIN dengan Alias

Anda dapat menggunakan alias untuk nama tabel untuk membuat query lebih pendek:

SELECT p.nama, pe.tanggal, pe.jumlah
FROM pelanggan AS p
FULL JOIN pesanan AS pe
ON p.id = pe.pelanggan_id;

FULL JOIN dengan WHERE

Anda dapat menggabungkan FULL JOIN dengan WHERE untuk memfilter hasil:

SELECT p.nama, pe.tanggal, pe.jumlah
FROM pelanggan AS p
FULL JOIN pesanan AS pe ON p.id = pe.pelanggan_id
WHERE pe.jumlah > 100000;

FULL JOIN dengan IS NULL

Anda dapat menggunakan FULL JOIN dengan IS NULL untuk menemukan baris yang tidak memiliki kecocokan di salah satu tabel:

-- Pelanggan yang tidak memiliki pesanan
SELECT p.nama, p.email
FROM pelanggan AS p
FULL JOIN pesanan AS pe ON p.id = pe.pelanggan_id
WHERE pe.id IS NULL;

-- Pesanan yang tidak memiliki pelanggan
SELECT pe.id, pe.tanggal, pe.jumlah
FROM pelanggan AS p
FULL JOIN pesanan AS pe ON p.id = pe.pelanggan_id
WHERE p.id IS NULL;

FULL JOIN dengan Beberapa Tabel

Anda dapat menggabungkan lebih dari dua tabel:

SELECT p.nama, pe.tanggal, pr.nama_produk
FROM pelanggan AS p
FULL JOIN pesanan AS pe ON p.id = pe.pelanggan_id
FULL JOIN produk AS pr ON pe.produk_id = pr.id;

FULL JOIN dengan Agregat

Anda dapat menggunakan fungsi agregat dengan FULL JOIN:

SELECT p.nama, COUNT(pe.id) AS jumlah_pesanan, SUM(pe.jumlah) AS total_belanja
FROM pelanggan AS p
FULL JOIN pesanan AS pe ON p.id = pe.pelanggan_id
GROUP BY p.id, p.nama
ORDER BY total_belanja DESC;

FULL JOIN vs. LEFT JOIN + RIGHT JOIN

FULL JOIN pada dasarnya adalah kombinasi dari LEFT JOIN dan RIGHT JOIN. Anda dapat mensimulasikan FULL JOIN dengan menggunakan UNION:

-- FULL JOIN
SELECT p.nama, pe.tanggal, pe.jumlah
FROM pelanggan AS p
FULL JOIN pesanan AS pe ON p.id = pe.pelanggan_id;

-- Sama dengan LEFT JOIN + RIGHT JOIN dengan UNION
SELECT p.nama, pe.tanggal, pe.jumlah
FROM pelanggan AS p
LEFT JOIN pesanan AS pe ON p.id = pe.pelanggan_id
UNION
SELECT p.nama, pe.tanggal, pe.jumlah
FROM pelanggan AS p
RIGHT JOIN pesanan AS pe ON p.id = pe.pelanggan_id;

Catatan: FULL JOIN tidak didukung di MySQL. Anda dapat mensimulasikannya dengan menggunakan UNION dari LEFT JOIN dan RIGHT JOIN seperti yang ditunjukkan di atas.

FULL JOIN dengan COALESCE

Anda dapat menggunakan fungsi COALESCE dengan FULL JOIN untuk menampilkan nilai yang tidak NULL:

SELECT COALESCE(p.nama, 'Tanpa Pelanggan') AS nama, pe.tanggal, pe.jumlah
FROM pelanggan AS p
FULL JOIN pesanan AS pe ON p.id = pe.pelanggan_id;

Coba Sendiri

Anda dapat mencoba kode SQL di atas di editor berikut:

💡 Tips Perintah FULL JOIN

FULL JOIN sangat berguna untuk menemukan semua data dari kedua tabel, termasuk data yang tidak memiliki kecocokan. Ini sering digunakan untuk audit data atau untuk menemukan ketidakkonsistenan antara tabel.