IS NULL dan IS NOT NULL
Uji nilai yang hilang dengan benar.
IS NULL dan IS NOT NULL adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.
Menguji nilai yang hilang
Karena perbandingan dengan NULL selalu menghasilkan unknown, SQL menyediakan dua operator khusus untuk menguji nilai yang hilang: IS NULL dan IS NOT NULL.
Keduanya adalah satu-satunya cara yang andal untuk menemukan atau mengecualikan nilai NULL. Dalam pelajaran ini, Anda akan mempelajari cara menggunakannya dengan benar.
-- Rows where phone is missing
SELECT name FROM customers WHERE phone IS NULL;
-- Rows where phone is present
SELECT name FROM customers WHERE phone IS NOT NULL;Mengapa = NULL gagal
Anda mungkin tergoda untuk menulis WHERE phone = NULL, tetapi pernyataan itu tidak pernah cocok dengan apa pun. Kondisinya dievaluasi menjadi unknown untuk setiap baris, dan WHERE hanya mempertahankan baris yang benar.
Hasilnya adalah himpunan kosong — kesalahan yang tidak terlihat karena tidak ada kesalahan yang muncul.
-- Always returns 0 rows, even if NULLs exist
SELECT * FROM customers WHERE phone = NULL;
-- The fix
SELECT * FROM customers WHERE phone IS NULL;IS NULL dalam praktik
IS NULL menghasilkan true tepat ketika nilainya hilang, dan false jika tidak. Operator ini tidak pernah menghasilkan unknown.
Dengan demikian, operator ini aman digunakan di mana pun Anda memerlukan hasil benar/salah yang jelas.
SELECT id, name, (phone IS NULL) AS missing_phone
FROM customers;
-- id | name | missing_phone
-- ---+-------+--------------
-- 1 | Alice | f
-- 2 | Bob | t
-- 3 | Carol | tIS NOT NULL dalam praktik
IS NOT NULL adalah kebalikannya: menghasilkan true ketika nilainya ada, dan false ketika nilainya hilang.
Gunakan untuk menyaring baris yang benar-benar memiliki data, seperti pelanggan yang dapat Anda hubungi.
SELECT name, phone
FROM customers
WHERE phone IS NOT NULL;
-- name | phone
-- ------+----------
-- Alice | 555-0101Menggabungkan dengan AND / OR
Anda dapat menggabungkan pemeriksaan NULL dengan kondisi lain menggunakan AND dan OR.
Misalnya, temukan pelanggan aktif yang nomor teleponnya belum tercatat — kueri kualitas data yang umum.
SELECT id, name
FROM customers
WHERE is_active = true
AND phone IS NULL;
-- Active customers missing a phone numberNULL dalam NOT IN: jebakan
NOT IN berperilaku tidak terduga ketika daftar tersebut berisi NULL. Jika ada nilai NULL di dalam himpunan, NOT IN dapat menghasilkan unknown untuk setiap baris, sehingga membuang hasil yang Anda harapkan.
Utamakan NOT EXISTS atau saring nilai NULL dari subkueri terlebih dahulu.
-- Risky: if blocked_ids contains a NULL, this returns nothing
SELECT * FROM users
WHERE id NOT IN (SELECT user_id FROM blocked);
-- Safer
SELECT * FROM users
WHERE id NOT IN (SELECT user_id FROM blocked WHERE user_id IS NOT NULL);IS DISTINCT FROM
PostgreSQL menyediakan IS DISTINCT FROM dan IS NOT DISTINCT FROM — operator perbandingan yang aman terhadap NULL.
Tidak seperti =, operator tersebut memperlakukan dua NULL sebagai sama dan NULL dibandingkan dengan suatu nilai sebagai berbeda. Operator tersebut selalu menghasilkan true atau false, tidak pernah unknown.
SELECT
NULL IS NOT DISTINCT FROM NULL AS a, -- true: both NULL = same
NULL IS DISTINCT FROM 5 AS b, -- true: NULL differs from 5
5 IS DISTINCT FROM 5 AS c; -- false: same valueMembandingkan dua kolom yang dapat bernilai NULL
Saat membandingkan dua kolom yang mungkin sama-sama bernilai NULL, = biasa tidak menangani kasus ketika keduanya NULL. IS NOT DISTINCT FROM menanganinya dengan baik.
Ini sangat berguna untuk menemukan baris yang tidak berubah, bahkan ketika nilainya tidak diketahui.
-- Rows where old and new phone are 'the same',
-- counting NULL = NULL as same
SELECT id
FROM customer_changes
WHERE old_phone IS NOT DISTINCT FROM new_phone;Menghitung NULL
Salah satu penggunaan praktis IS NULL adalah mengaudit kualitas data — menghitung berapa banyak baris yang kehilangan nilai.
Gabungkan dengan FILTER (PostgreSQL) atau CASE di dalam COUNT untuk menghitung nilai NULL dan nilai selain NULL secara berdampingan.
SELECT
count(*) AS total,
count(*) FILTER (WHERE phone IS NULL) AS missing,
count(*) FILTER (WHERE phone IS NOT NULL) AS present
FROM customers;Pemeriksaan NULL dalam batasan CHECK
Anda dapat menggunakan pemeriksaan NULL di dalam batasan CHECK untuk menegakkan aturan seperti "jika baris telah dikirim, baris tersebut harus memiliki tanggal pengiriman".
Catatan: batasan CHECK dianggap lulus ketika kondisinya true atau unknown, jadi pertimbangkan kasus NULL dengan cermat.
CREATE TABLE orders (
id integer PRIMARY KEY,
status text NOT NULL,
ship_date date,
CHECK (status <> 'shipped' OR ship_date IS NOT NULL)
);Praktik terbaik
Biasakan hal-hal berikut agar tetap aman saat menangani NULL:
- Selalu lakukan pemeriksaan dengan
IS NULL/IS NOT NULL, jangan pernah menggunakan= NULL. - Waspadai
NOT INdengan subkueri yang dapat bernilai NULL. - Gunakan
IS DISTINCT FROMuntuk kesetaraan yang aman terhadap NULL. - Audit data yang hilang dengan
count(*) FILTER (...).
-- The reliable toolkit
WHERE col IS NULL
WHERE col IS NOT NULL
WHERE a IS DISTINCT FROM b
WHERE a IS NOT DISTINCT FROM bPemeriksaan Singkat
Anda ingin mendapatkan semua pelanggan yang kolom phone-nya tidak memiliki nilai. Klausa WHERE mana yang benar?
Ringkasan
Anda mempelajari cara yang benar untuk memeriksa nilai yang hilang dengan IS NULL dan IS NOT NULL, serta alasan = NULL tidak pernah berhasil.
Anda juga mengenal jebakan NOT IN, operator IS DISTINCT FROM yang aman terhadap NULL, dan cara memeriksa NULL dengan FILTER. Selanjutnya Anda akan mempelajari cara mengganti NULL dengan nilai bawaan yang masuk akal menggunakan COALESCE dan NULLIF.
SELECT name FROM customers WHERE phone IS NULL;
SELECT name FROM customers WHERE phone IS NOT NULL;Pertanyaan yang Sering Diajukan
Apakah pelajaran “IS NULL dan IS NOT NULL” gratis?
Ya — teks lengkap “IS NULL dan IS NOT NULL” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “IS NULL dan IS NOT NULL”?
Uji nilai yang hilang dengan benar. Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai SQL Academy?
Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “IS NULL dan IS NOT NULL” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?
Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Makna Sebenarnya NULL
- IS NULL dan IS NOT NULL
- COALESCE dan NULLIF
- NULL dalam Agregat dan JOIN