Penjelasan sederhana
COALESCE mengambil nilai pertama yang tidak kosong dari daftar yang kamu berikan. Paling sering dipakai untuk mengganti NULL dengan nilai pengganti, misalnya teks "Belum ditempatkan" atau angka 0.
Fungsinya mirip IFERROR atau IFNA di Excel: kalau nilai utamanya tidak ada, pakai nilai cadangan.
Sintaks
COALESCE(nilai1, nilai2, ..., default)
| Bagian | Keterangan |
|---|---|
nilai1, nilai2 | Dicek berurutan dari kiri. |
default | Dipakai jika semua nilai sebelumnya NULL. |
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 COALESCE
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,
COALESCE(d.nama_dept, 'Belum ditempatkan') AS departemen
FROM karyawan AS k
LEFT JOIN departemen AS d ON k.dept_id = d.id;
Hasil 8 baris
| nama | departemen |
|---|---|
| Andi Pratama | IT |
| Bunga Lestari | Keuangan |
| Candra Wijaya | IT |
| Dewi Anggraini | Marketing |
| Eko Saputra | Keuangan |
| Fajar Nugroho | Marketing |
| Gita Permata | IT |
| Hendra Gunawan | Belum ditempatkan |
NULL di nama departemen Hendra diganti teks yang lebih jelas.
Cara kerjanya, langkah demi langkah
LEFT JOINmenggabungkan karyawan dengan departemen. Hendra tidak punya departemen, jadi nama_dept-nya NULL.COALESCE(d.nama_dept, 'Belum ditempatkan'): untuk setiap baris, nama_dept dicek lebih dulu.- Kalau terisi (misalnya IT), nilai itu yang dipakai. Kalau NULL, dipakai teks cadangan.
- Baris Hendra sekarang bertuliskan "Belum ditempatkan" alih-alih NULL.
Dipakai untuk apa di kantor?
- Menampilkan 0 untuk pelanggan yang belum pernah belanja setelah
LEFT JOIN. - Mengisi kolom kosong di laporan supaya tidak membingungkan pembaca.
- Memilih nomor kontak yang tersedia: HP, kalau kosong telepon rumah, kalau kosong email.
Kesalahan yang sering terjadi
- Memberi nilai pengganti dengan tipe berbeda dari kolomnya, misalnya teks untuk kolom angka. Beberapa database menolaknya.
NULLIF