Penjelasan sederhana
NULLIF(a, b) menghasilkan NULL kalau a sama dengan b. Kalau berbeda, hasilnya tetap a.
Kegunaan utamanya mencegah error pembagian dengan nol. Membagi angka dengan 0 membuat query gagal, tapi membagi dengan NULL hanya menghasilkan NULL. Jadi penyebutnya "diamankan" dengan NULLIF(penyebut, 0).
Sintaks
NULLIF(nilai1, nilai2)
| Bagian | Keterangan |
|---|---|
nilai1 | Nilai yang dikembalikan jika berbeda dengan nilai2. |
nilai2 | Jika nilai1 sama dengan ini, hasilnya 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 NULLIF
Data contoh: karyawan
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 |
SELECT 500000 / NULLIF(0, 0) AS aman,
500000 / NULLIF(4, 0) AS normal;
Hasil 1 baris
| aman | normal |
|---|---|
| NULL | 125000 |
Pembagian dengan nol tidak lagi error, melainkan menghasilkan NULL.
Cara kerjanya, langkah demi langkah
- Kolom aman:
NULLIF(0, 0). Karena 0 sama dengan 0, hasilnya NULL. Lalu 500.000 ÷ NULL = NULL, tanpa error. - Kolom normal:
NULLIF(4, 0). Karena 4 tidak sama dengan 0, hasilnya tetap 4. Lalu 500.000 ÷ 4 = 125.000.
Dipakai untuk apa di kantor?
- Menghitung persentase capaian:
realisasi / NULLIF(target, 0). - Menghitung rata-rata per item ketika jumlah item bisa 0.
Kesalahan yang sering terjadi
- Lupa bahwa hasilnya NULL, bukan 0. Kalau laporan harus menampilkan 0, bungkus lagi dengan
COALESCE(..., 0).
Subquery