Audit Nilai NULL di Seluruh Tabel dengan SQL (2026)
TL;DR
Audit nilai NULL di SQL adalah proses ngitung berapa banyak data kosong di tiap kolom sebelum kamu mulai analisis. Cara dasarnya pakai COUNT(*) dikurangi COUNT(nama_kolom) buat tiap kolom. Buat tabel dengan banyak kolom, kamu bisa bikin query audit otomatis dari information_schema tanpa nulis satu-satu. Hasilnya kasih tahu kolom mana yang paling banyak bolong.
Audit nilai NULL di SQL adalah proses ngitung berapa banyak data kosong di tiap kolom sebelum kamu mulai analisis.
Ini langkah yang sering dilewat, padahal penting. Kolom yang separuh isinya kosong bisa bikin rata-rata melenceng dan kesimpulanmu salah tanpa kamu sadari.
Aku bakal tunjukin cara hitung NULL per kolom, ubah jadi persentase, sampai scan seluruh tabel otomatis tanpa nulis query satu-satu.
Apa itu nilai NULL di SQL?
NULL adalah penanda di SQL yang artinya nggak ada nilai sama sekali di sel itu. Beda dari nol atau string kosong. Nol itu angka, string kosong itu teks yang panjangnya nol, sedangkan NULL berarti datanya emang nggak ada atau belum diisi.
Bedanya kelihatan sepele, tapi ngefek ke perhitungan. Fungsi kayak AVG dan SUM otomatis ngelewatin NULL, jadi hasilnya bisa nyesatin kalau kamu nggak tahu ada berapa banyak yang kosong.
Gimana cara hitung NULL di satu kolom?
Cara paling ringkas pakai selisih COUNT(*) dan COUNT(nama_kolom). COUNT bintang ngitung semua baris, COUNT nama kolom cuma ngitung yang ada isinya. Selisihnya jumlah NULL.
SELECT
COUNT(*) AS total_baris,
COUNT(email) AS ada_isi,
COUNT(*) - COUNT(email) AS jumlah_null
FROM pelanggan;
Kalau total_baris 1.000 dan ada_isi 720, berarti ada 280 baris yang email-nya kosong. Cara ini jalan di hampir semua database dan lebih rapi dibanding WHERE email IS NULL yang cuma ngasih satu angka.
Cara ubah jumlah NULL jadi persentase
Angka mentah kadang susah dibaca. Persentase lebih cepat nunjukin kolom mana yang parah. Kali 100 lalu bagi total baris. Jangan lupa pakai 100.0 biar hasilnya nggak dipotong jadi bilangan bulat.
SELECT
ROUND(100.0 * (COUNT(*) - COUNT(email)) / COUNT(*), 1) AS persen_null_email,
ROUND(100.0 * (COUNT(*) - COUNT(telepon)) / COUNT(*), 1) AS persen_null_telepon,
ROUND(100.0 * (COUNT(*) - COUNT(alamat)) / COUNT(*), 1) AS persen_null_alamat
FROM pelanggan;
Hasilnya langsung kelihatan, misalnya email kosong 28%, telepon 5%, alamat 61%. Kolom alamat yang 61% kosong jelas nggak bisa dipercaya buat analisis apa pun.
Cara audit NULL di banyak kolom sekaligus
Format lebar tadi susah dibaca kalau kolomnya banyak. Aku lebih suka format panjang, satu baris per kolom, diurutkan dari yang paling bolong. Pakai UNION ALL buat numpuk hasilnya.
SELECT 'email' AS kolom, COUNT(*) - COUNT(email) AS jumlah_null FROM pelanggan
UNION ALL
SELECT 'telepon', COUNT(*) - COUNT(telepon) FROM pelanggan
UNION ALL
SELECT 'alamat', COUNT(*) - COUNT(alamat) FROM pelanggan
ORDER BY jumlah_null DESC;
Hasilnya rapi kayak laporan: nama kolom di kiri, jumlah NULL di kanan, diurutkan dari terparah. Ini format yang enak dibaca buat presentasi ke tim.
Audit NULL di seluruh tabel otomatis
Kalau tabelmu punya 40 kolom, nulis UNION ALL satu-satu bikin capek. Solusinya, biarin SQL yang nulisin query-nya buat kamu lewat information_schema. Ini katalog bawaan database yang nyimpan daftar semua kolom.
Query berikut nggak langsung ngitung NULL, tapi ngasih kamu teks query audit yang siap dijalanin (contoh PostgreSQL):
SELECT string_agg(
'SELECT ''' || column_name || ''' AS kolom, ' ||
'COUNT(*) - COUNT(' || quote_ident(column_name) || ') AS jumlah_null ' ||
'FROM ' || quote_ident(table_name),
' UNION ALL ' || chr(10)
) AS query_audit
FROM information_schema.columns
WHERE table_name = 'pelanggan'
AND table_schema = 'public';
Jalanin ini, kamu bakal dapat satu teks panjang berisi query UNION ALL buat semua kolom. Salin, tempel, jalanin lagi, dan kamu punya audit lengkap tanpa ngetik manual. Buat 40 kolom, ini nghemat belasan menit.
Kalau kamu masih baru sama konsep NULL atau SQL secara umum, cek dulu glossary biar nyambung sama query di atas.
Contoh kasus: audit data toko_berkah
Anggap kamu baru terima tabel pelanggan dari toko_berkah, UMKM sembako dengan 4.200 baris data member. Sebelum bikin kampanye promo, kamu audit dulu kelengkapan datanya.
Hasil audit-nya kayak gini:
| Kolom | Jumlah NULL | Persen kosong |
|---|---|---|
| alamat | 2.562 | 61,0% |
| 1.176 | 28,0% | |
| tanggal_lahir | 420 | 10,0% |
| telepon | 210 | 5,0% |
| nama | 0 | 0,0% |
Temuannya jelas. Rencana kirim promo lewat email langsung goyah, soalnya 28% member nggak punya email. Sebaliknya, kolom telepon cuma 5% kosong, jadi kampanye lewat WhatsApp jauh lebih masuk akal. Satu audit 2 menit ngubah keputusan strategi promo. Ini alasan kenapa audit NULL bukan formalitas.
Kesalahan umum saat audit NULL
- Nganggep string kosong sebagai NULL. COUNT tetap ngitung string kosong sebagai ada isi. Cek pakai
WHERE kolom = ''kalau curiga. - Lupa 100.0 di persentase. Pakai 100 doang bikin hasilnya dipotong jadi 0. Selalu pakai
100.0. - Isi NULL asal nol. Ngisi kolom angka yang kosong dengan nol bisa nggeser rata-rata. Pikirin dulu apakah nol itu makna yang bener.
- Audit sekali doang. Data baru masuk tiap hari. Audit ulang secara rutin, bukan cuma pas pertama terima data.
FAQ
Pertanyaan yang sering muncul soal audit NULL aku jawab di bagian FAQ, mulai dari beda NULL sama string kosong sampai apa yang harus dilakukan setelah nemu banyak data bolong.
Lanjut dari sini
Yang perlu diingat: hitung NULL pakai selisih COUNT, ubah jadi persentase biar gampang dibaca, dan pakai information_schema buat tabel berkolom banyak.
Audit NULL cuma satu bagian dari cek kualitas data. Lanjut baca query cek kualitas data di SQL buat cek duplikat dan nilai aneh juga. Latihan query-nya langsung di NgulikSQL.
Buat detail soal information_schema, cek dokumentasi PostgreSQL. Simpan artikel ini buat dipakai tiap kali terima dataset baru.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Artikel terkait
Fungsi NTH_VALUE di SQL untuk Ambil Nilai ke-N (2026)
NTH_VALUE ngambil nilai baris ke-N dalam window, tapi frame default-nya sering bikin hasil NULL. Ini sintaksnya, cara benerin frame, plus contoh transaksi toko.
Running Max dan Min dengan Window Function SQL
Lacak nilai tertinggi dan terendah berjalan di SQL pakai window function MAX dan MIN OVER. Ini sintaks, frame clause, dan contoh rekor omzet toko.
Analisa Afinitas Produk (Cross-Sell) dengan SQL
Produk apa yang sering dibeli bareng? Analisa afinitas produk pakai SQL self JOIN jawab itu. Ini cara hitung support, confidence, dan lift buat strategi cross-sell.