IS NULL, IS NOT NULL, dan COALESCE
Deteksi NULL dengan IS NULL, gantikan dengan COALESCE / NULLIF, dan rancang kueri yang tetap berjalan baik saat data tidak lengkap.
IS NULL, IS NOT NULL, dan COALESCE adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 4 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 NULL
Gunakan IS NULL dan IS NOT NULL — jangan pernah menggunakan = NULL:
SELECT * FROM users WHERE deleted_at IS NULL;
SELECT * FROM users WHERE deleted_at IS NOT NULL;Mengapa = NULL Gagal Secara Diam-Diam
Membandingkan apa pun dengan NULL menghasilkan NULL (tidak diketahui). Baris tersebut dibuang — tetapi Anda tidak mendapatkan error, sehingga bug tersebut dapat lolos ke produksi:
SELECT * FROM users WHERE deleted_at = NULL;
-- → returns 0 rows, alwaysCOALESCE: NULL Pertama yang Bukan NULL
COALESCE menerima sejumlah argumen dan mengembalikan argumen pertama yang bukan NULL:
SELECT id,
COALESCE(nickname, full_name, email, 'Anonymous') AS display_name
FROM users;COALESCE dalam WHERE
Gunakan COALESCE untuk mengubah NULL menjadi nilai bawaan yang dapat diurutkan atau dibandingkan:
-- Treat NULL last_login_at as the epoch:
SELECT * FROM users
ORDER BY COALESCE(last_login_at, '1970-01-01') DESC;NULLIF: Kebalikannya
NULLIF(a, b) mengembalikan NULL ketika a = b, dan a jika tidak:
-- Treat 0 as missing so AVG ignores it:
SELECT AVG(NULLIF(price, 0)) FROM products;
-- Convert empty string to NULL on insert:
INSERT INTO contacts (phone) VALUES (NULLIF(:phone, ''));CASE untuk Nilai Bawaan Bersyarat
CASE adalah alternatif serbaguna ketika COALESCE tidak cukup fleksibel:
SELECT id,
CASE
WHEN status IS NULL OR status = '' THEN 'unknown'
WHEN status = 'A' THEN 'active'
ELSE status
END AS status_label
FROM users;NULL dalam CHECK dan Batasan
Batasan CHECK lolos ketika kondisinya NULL. Nyatakan secara eksplisit jika Anda perlu melarang NULL:
CREATE TABLE prices (
amount NUMERIC(10,2),
CHECK (amount > 0) -- amount = NULL passes!
);
-- Better:
CREATE TABLE prices2 (
amount NUMERIC(10,2) NOT NULL CHECK (amount > 0)
);NULL dalam JOIN ON
Pasangan baris yang kunci gabungnya NULL tidak pernah cocok — NULL = NULL adalah NULL. Gunakan IS NOT DISTINCT FROM jika Anda ingin NULL dianggap sama dengan NULL:
SELECT * FROM a JOIN b ON a.key IS NOT DISTINCT FROM b.key;NULL dan UNIQUE
SQL standar memperlakukan NULL sebagai nilai berbeda dalam batasan UNIQUE — Anda dapat memiliki banyak baris NULL:
CREATE TABLE invites (
id BIGSERIAL PRIMARY KEY,
email VARCHAR(255) UNIQUE
);
INSERT INTO invites (email) VALUES (NULL), (NULL); -- both succeed!Ringkasan NULL dan Fungsi Agregat
Fungsi agregat (kecuali COUNT(*)) melewati NULL.
SELECT COUNT(*) FROM users; -- all rows
SELECT COUNT(email) FROM users; -- rows where email IS NOT NULL
SELECT COUNT(DISTINCT id) FROM users;Selalu Nyatakan NOT NULL Jika Memungkinkan
NOT NULL adalah jaminan kebenaran yang paling sederhana dan kuat. Tambahkan ke setiap kolom yang tidak boleh kosong.
Ringkasan
Penanganan NULL adalah sumber terbesar bug SQL yang sulit dideteksi.
- Uji dengan
IS NULL - Ganti dengan
COALESCE - Ubah nilai penanda menjadi NULL dengan
NULLIF - Gunakan
NOT NULLsebagai bawaan
Pemeriksaan Singkat
Ekspresi mana yang mengembalikan email jika tidak NULL, dan literal 'no-email' jika NULL?
Pertanyaan yang Sering Diajukan
Apakah pelajaran “IS NULL, IS NOT NULL, dan COALESCE” gratis?
Ya — teks lengkap “IS NULL, IS NOT NULL, dan COALESCE” 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, IS NOT NULL, dan COALESCE”?
Deteksi NULL dengan IS NULL, gantikan dengan COALESCE / NULLIF, dan rancang kueri yang tetap berjalan baik saat data tidak lengkap. 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 4 dari 4.
Berapa lama pelajaran “IS NULL, IS NOT NULL, dan COALESCE” 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
- Pola LIKE dan Karakter Wildcard
- IN dan NOT IN untuk Himpunan
- BETWEEN untuk Rentang
- IS NULL, IS NOT NULL, dan COALESCE