Penjelasan sederhana
LEFT JOIN mempertahankan semua baris dari tabel kiri (yang ditulis setelah FROM), lalu menempelkan data dari tabel kanan kalau ada pasangannya. Kalau tidak ada pasangan, kolom dari tabel kanan diisi NULL (kosong).
Ini mirip VLOOKUP yang hasilnya #N/A untuk data yang tidak ketemu: barisnya tetap ada, hanya kolom tambahannya kosong. Karena tidak ada data yang hilang, LEFT JOIN adalah jenis JOIN yang paling sering dipakai analis data.
Sintaks
SELECT a.kolom, b.kolom
FROM tabel_a AS a
LEFT JOIN tabel_b AS b
ON a.kunci = b.kunci;
| Bagian | Keterangan |
|---|---|
tabel kiri | Tabel setelah FROM. Semua barisnya dipertahankan. |
tabel kanan | Tabel setelah LEFT JOIN. Hanya baris yang cocok yang diambil. |
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 LEFT 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
LEFT JOIN departemen AS d
ON k.dept_id = d.id;
Hasil 8 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 |
Semua 8 karyawan muncul. Hendra tetap tampil dengan nama_dept NULL.
Cara kerjanya, langkah demi langkah
FROM karyawan AS k: 8 karyawan diambil sebagai tabel kiri. Semuanya pasti muncul di hasil.LEFT JOIN departemen AS d ON k.dept_id = d.id: untuk tiap karyawan, dicari departemen yang cocok.- Tujuh karyawan menemukan departemennya.
- Hendra tidak punya dept_id, jadi tidak menemukan pasangan. Ia tetap ditampilkan dengan nama_dept NULL.
- Hasilnya 8 baris, sama dengan jumlah karyawan.
Dipakai untuk apa di kantor?
- Menampilkan semua pelanggan beserta total belanjanya, termasuk yang belum pernah belanja.
- Mencari data yang belum punya pasangan, misalnya produk yang belum pernah terjual.
Kesalahan yang sering terjadi
- Menaruh syarat untuk tabel kanan di
WHERE, misalnyaWHERE d.lokasi = 'Jakarta'. Baris NULL ikut terbuang dan hasilnya berubah jadi sepertiINNER JOIN. Taruh syaratnya diON. - Tertukar urutan tabel. Tabel yang ingin dipertahankan semua barisnya harus ditulis di
FROM.
RIGHT JOIN