Perintah LEFT JOIN
📚 Pengenalan Perintah LEFT JOIN
LEFT JOIN mengembalikan semua baris dari tabel kiri dan baris yang cocok dari tabel kanan. Jika tidak ada kecocokan, hasilnya adalah NULL di sisi kanan.
Sintaks LEFT JOIN
Sintaks untuk LEFT JOIN adalah:
SELECT tabel1.kolom1, tabel2.kolom2, ... FROM tabel1 LEFT JOIN tabel2 ON tabel1.kolom_kunci = tabel2.kolom_kunci;
Atau dengan kata kunci OUTER (opsional):
SELECT tabel1.kolom1, tabel2.kolom2, ... FROM tabel1 LEFT 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 LEFT JOIN
Untuk menggabungkan tabel 'pelanggan' dan 'pesanan' berdasarkan id pelanggan:
SELECT pelanggan.nama, pesanan.tanggal, pesanan.jumlah FROM pelanggan LEFT 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 |
Perhatikan bahwa:
- Bob Johnson muncul meskipun tidak ada pesanan yang terkait dengannya
- Pesanan dengan id 104 tidak muncul karena pelanggan dengan id 4 tidak ada
LEFT 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 LEFT JOIN pesanan AS pe ON p.id = pe.pelanggan_id;
LEFT JOIN dengan WHERE
Anda dapat menggabungkan LEFT JOIN dengan WHERE untuk memfilter hasil:
SELECT p.nama, pe.tanggal, pe.jumlah FROM pelanggan AS p LEFT JOIN pesanan AS pe ON p.id = pe.pelanggan_id WHERE pe.jumlah > 100000;
LEFT JOIN dengan IS NULL
Anda dapat menggunakan LEFT JOIN dengan IS NULL untuk menemukan baris yang tidak memiliki kecocokan:
SELECT p.nama, p.email FROM pelanggan AS p LEFT JOIN pesanan AS pe ON p.id = pe.pelanggan_id WHERE pe.id IS NULL;
Hasilnya akan menjadi:
| nama | |
|---|---|
| Bob Johnson | bob@example.com |
LEFT JOIN dengan Beberapa Tabel
Anda dapat menggabungkan lebih dari dua tabel:
SELECT p.nama, pe.tanggal, pr.nama_produk FROM pelanggan AS p LEFT JOIN pesanan AS pe ON p.id = pe.pelanggan_id LEFT JOIN produk AS pr ON pe.produk_id = pr.id;
LEFT JOIN dengan Agregat
Anda dapat menggunakan fungsi agregat dengan LEFT JOIN:
SELECT p.nama, COUNT(pe.id) AS jumlah_pesanan, SUM(pe.jumlah) AS total_belanja FROM pelanggan AS p LEFT JOIN pesanan AS pe ON p.id = pe.pelanggan_id GROUP BY p.id, p.nama ORDER BY total_belanja DESC;
LEFT JOIN dengan Multiple Conditions
Anda dapat menggunakan beberapa kondisi dalam klausa ON:
SELECT p.nama, pe.tanggal, pe.jumlah FROM pelanggan AS p LEFT JOIN pesanan AS pe ON p.id = pe.pelanggan_id AND pe.jumlah > 100000;
LEFT JOIN vs. INNER JOIN
Perbedaan utama antara LEFT JOIN dan INNER JOIN adalah:
-- INNER JOIN - hanya baris yang cocok SELECT p.nama, pe.tanggal, pe.jumlah FROM pelanggan AS p INNER JOIN pesanan AS pe ON p.id = pe.pelanggan_id; -- LEFT JOIN - semua baris dari tabel kiri SELECT p.nama, pe.tanggal, pe.jumlah FROM pelanggan AS p LEFT JOIN pesanan AS pe ON p.id = pe.pelanggan_id;
Coba Sendiri
Anda dapat mencoba kode SQL di atas di editor berikut:
💡 Tips Perintah LEFT JOIN
LEFT JOIN sangat berguna untuk menemukan data yang "hilang" atau tidak memiliki kecocokan di tabel lain. Misalnya, menemukan pelanggan yang tidak pernah melakukan pesanan atau produk yang tidak pernah terjual.