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 | |
|---|---|---|
| 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:
- Bob Johnson muncul meskipun tidak ada pesanan yang terkait dengannya
- Pesanan dengan id 104 muncul meskipun pelanggan dengan id 4 tidak ada
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.