DISTINCT dan Menjinakkan NULL dengan IFNULL & COALESCE
Menghilangkan data kembar dengan DISTINCT dan mengganti nilai kosong dengan IFNULL, COALESCE, dan NULLIF agar laporan terlihat rapi.
DISTINCT: buang yang kembar
Berapa kota asal pelanggan KopiKita? Kalau kita lihat kolom kota, Jakarta muncul tiga kali. DISTINCT menampilkan setiap nilai cukup sekali:
SELECT kota FROM pelanggan; -- 10 baris, ada yang berulang
SELECT DISTINCT kota FROM pelanggan; -- 6 baris, tiap kota sekali
Dengan lebih dari satu kolom, DISTINCT menilai kombinasinya:
SELECT DISTINCT kota, YEAR(tgl_daftar) AS tahun FROM pelanggan;
Jika ingin menghitung jumlah nilai unik: SELECT COUNT(DISTINCT kota) FROM pelanggan; (dibahas di bab Agregat).
Masalah NULL di laporan
Di laporan, tulisan NULL terlihat kurang sedap dan hitungan yang melibatkan NULL menghasilkan NULL. Solusinya: mengganti NULL dengan nilai pengganti.
IFNULL(x, pengganti)
SELECT nama, IFNULL(email, 'belum diisi') AS email_kontak
FROM pelanggan;
Bila email ada isinya, pakai isinya; bila NULL, pakai 'belum diisi'.
COALESCE(a, b, c, ...)
Seperti IFNULL tetapi bisa banyak pilihan: ambil nilai pertama yang tidak NULL dari daftar. COALESCE adalah standar SQL, jadi berlaku di hampir semua database.
SELECT COALESCE(email, telepon, 'tidak ada kontak') FROM pelanggan;
NULLIF(a, b): kebalikannya
Menghasilkan NULL jika a sama dengan b. Sering dipakai untuk menghindari pembagian dengan nol:
SELECT total / NULLIF(jumlah, 0) FROM laporan; -- jumlah 0 → NULL, bukan error
NULL dan hitungan
| Ekspresi | Hasil |
|---|---|
5 + NULL | NULL |
IFNULL(NULL, 0) + 5 | 5 |
CONCAT('a', NULL) | NULL |
CONCAT('a', IFNULL(NULL, '')) | a |
Kapan NULL dibiarkan? NULL itu jujur: artinya "tidak tahu". Jangan buru-buru mengisinya dengan 0 atau '-' di dalam database, karena rata-rata, hitungan, dan filter bisa jadi menyesatkan. Ganti NULL hanya saat menampilkan data, dengan IFNULL/COALESCE.