0Pricing
Coding Interview Prep · Pelajaran

COALESCE, NULLIF, dan ISNULL

Ganti nilai dengan nilai bawaan dan pahami perbedaan COALESCE dengan fungsi khusus vendor.

COALESCE, NULLIF, dan ISNULL adalah pelajaran Coding Interview Prep gratis di CoddyKit. Ini adalah pelajaran 3 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 Coding Interview Prep, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Coding Interview Prep mencakup 4 pelajaran total.

Mengganti Nilai NULL

Setelah Anda dapat mendeteksi NULL, keterampilan wawancara berikutnya adalah menggantinya dengan nilai bawaan yang sesuai. Alat standar portabel untuk tujuan ini adalah COALESCE.

Selain itu, Anda akan mempelajari NULLIF, yang bekerja ke arah sebaliknya dengan mengubah nilai tertentu menjadi NULL, serta fungsi vendor ISNULL (SQL Server) dan IFNULL (MySQL) yang sering tertukar dengan COALESCE oleh kandidat.

Mengetahui dengan tepat perbedaan masing-masing, terutama dalam jumlah argumen dan tipe hasil, merupakan pertanyaan penyaringan yang sering diajukan.

Dasar-Dasar COALESCE

COALESCE menerima argumen dalam jumlah berapa pun dan mengembalikan argumen pertama yang bukan NULL dengan memeriksanya dari kiri ke kanan. Jika semua argumen bernilai NULL, hasilnya NULL.

COALESCE merupakan standar ANSI dan berfungsi pada semua basis data utama, sehingga sebaiknya menjadi jawaban bawaan Anda. Gunakan untuk menyediakan nilai cadangan dalam tampilan, perhitungan, atau pengelompokan.

-- Show 0 instead of NULL for missing bonuses
SELECT name, COALESCE(bonus, 0) AS bonus
FROM employees;

-- Multiple fallbacks, first non-NULL wins
SELECT COALESCE(mobile_phone, home_phone, 'no phone') AS contact
FROM customers;

COALESCE Menghentikan Evaluasi Secara Dini

Detail yang sering digali pewawancara: secara konseptual, COALESCE mengevaluasi argumen dari kiri ke kanan dan berhenti pada argumen pertama yang bukan NULL. Jadi, ekspresi berikutnya yang mahal tidak diperlukan setelah ekspresi sebelumnya menghasilkan nilai.

Dalam praktiknya, pengoptimal mungkin tetap melakukan evaluasi sejak awal pada beberapa mesin, jadi jangan mengandalkannya untuk melindungi dari kesalahan seperti pembagian dengan nol. Namun, prioritas dari kiri ke kanan dalam menentukan nilai yang dipilih tetap dijamin.

-- Prefer the manual override, else the computed value,
-- else a constant default
SELECT COALESCE(manual_price, list_price * 1.1, 9.99) AS price
FROM products;

COALESCE dan Tipe Data Hasil

Jebakan yang cukup halus: tipe data hasil COALESCE ditentukan oleh prioritas tipe dari seluruh argumennya secara gabungan, bukan hanya argumen pertama. Mencampur tipe yang tidak kompatibel dapat menyebabkan kesalahan atau pemotongan yang tidak terduga.

Misalnya, COALESCE pada kolom bilangan bulat dan nilai bawaan berupa string dapat gagal atau mengalami konversi implisit, bergantung pada mesin yang digunakan. Pewawancara menggunakan hal ini untuk menguji apakah Anda mempertimbangkan tipe data.

-- Risky: integer column with a string fallback
-- may error or force a cast depending on dialect
SELECT COALESCE(score, 'N/A') FROM tests;

-- Safer: keep the fallback type-compatible, or cast explicitly
SELECT COALESCE(CAST(score AS VARCHAR), 'N/A') FROM tests;

ISNULL (SQL Server) dibandingkan dengan COALESCE

SQL Server memiliki ISNULL(expr, replacement). Fungsinya tampak seperti COALESCE, tetapi memiliki beberapa perbedaan penting yang sering dijadikan bahan perbandingan oleh pewawancara:

  • Jumlah argumen: ISNULL menerima tepat dua argumen; COALESCE dapat menerima banyak argumen.
  • Tipe hasil: ISNULL menggunakan tipe argumen pertama, sehingga nilai pengganti dapat terpotong. COALESCE menggunakan prioritas tipe gabungan.
  • Portabilitas: ISNULL hanya tersedia di SQL Server; COALESCE merupakan standar ANSI.

Rekomendasi yang dapat Anda sampaikan: pilih COALESCE demi portabilitas dan penentuan tipe yang dapat diprediksi.

-- SQL Server: ISNULL may truncate the replacement to
-- the first argument's type (e.g. CHAR(1))
SELECT ISNULL(code, 'UNKNOWN') FROM items;
-- If code is CHAR(1), 'UNKNOWN' becomes 'U'

-- COALESCE picks the wider type and keeps 'UNKNOWN'
SELECT COALESCE(code, 'UNKNOWN') FROM items;

IFNULL dan NVL

Dialek lain memiliki bentuk singkat dengan dua argumen sendiri:

  • MySQL / SQLite: IFNULL(expr, replacement)
  • Oracle: NVL(expr, replacement), serta NVL2 untuk variasi kondisi lalu/jika tidak

Ketiganya berperilaku seperti COALESCE dengan dua argumen. Jika ditanya idiom khusus MySQL atau Oracle, sebutkan fungsi-fungsi tersebut; jika tidak, gunakan COALESCE.

-- MySQL
SELECT IFNULL(bonus, 0) FROM employees;

-- Oracle
SELECT NVL(bonus, 0) FROM employees;
-- NVL2(bonus, 'has bonus', 'no bonus') -> if/else on NULL

NULLIF: Arah yang Berlawanan

NULLIF(a, b) mengembalikan NULL ketika a = b; jika tidak, fungsi ini mengembalikan a. Fungsi ini sengaja membuat NULL, kebalikan dari COALESCE.

Penggunaan yang paling terkenal adalah untuk mencegah pembagian dengan nol. Bungkus penyebut dengan NULLIF(denominator, 0): jika nilainya nol, pembagi menjadi NULL dan seluruh pembagian menghasilkan NULL, bukan menimbulkan kesalahan.

-- Avoid divide-by-zero: returns NULL instead of erroring
SELECT revenue / NULLIF(orders, 0) AS avg_order_value
FROM daily_stats;

-- NULLIF(5, 5) -> NULL
-- NULLIF(5, 3) -> 5

Menggabungkan NULLIF dan COALESCE

Keduanya sangat cocok dipadukan. Satu baris yang lazim dalam wawancara adalah "pembagian aman yang menampilkan 0 ketika tidak ada pesanan". Gunakan NULLIF untuk menghindari kesalahan, lalu COALESCE untuk mengganti NULL yang dihasilkan.

Idiom ringkas ini menunjukkan kefasihan: Anda menangani kasus khusus dan penyajiannya dalam satu ekspresi.

SELECT
  COALESCE(revenue / NULLIF(orders, 0), 0) AS avg_order_value
FROM daily_stats;

-- orders = 0 -> NULLIF gives NULL -> division gives NULL
-- -> COALESCE turns it into 0

Memperlakukan Teks Kosong sebagai NULL

Penggunaan praktis NULLIF lainnya adalah mengubah teks kosong menjadi NULL agar dapat diproses secara seragam dengan COALESCE. Data yang tidak rapi sering mencampurkan NULL dan ''; cara ini menormalkan keduanya.

Bacalah pola ini sebagai berikut: "jika nilainya kosong, jadikan NULL, lalu gunakan nilai cadangan." Ini merupakan jawaban yang rapi dan portabel untuk pertanyaan "bagaimana Anda memperlakukan teks kosong dan nilai yang tidak ada dengan cara yang sama?"

-- Treat both '' and NULL as missing, default to 'Anonymous'
SELECT COALESCE(NULLIF(TRIM(username), ''), 'Anonymous')
FROM users;

Menerapkan COALESCE pada Hasil JOIN

Setelah LEFT JOIN, baris yang tidak memiliki kecocokan menghasilkan NULL di sisi kanan. COALESCE mengubahnya menjadi nilai bawaan yang bermakna dalam keluaran, sebuah persyaratan pelaporan yang sangat umum.

Di sini, pelanggan tanpa pesanan tetap ditampilkan (berkat LEFT JOIN), dan totalnya ditampilkan sebagai 0, bukan NULL. Menyebutkan bahwa COALESCE diterapkan setelah JOIN, bukan di dalamnya, menunjukkan bahwa Anda memahami urutan evaluasi.

SELECT
  c.name,
  COALESCE(SUM(o.amount), 0) AS total_spent
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.name;
-- Customers with no orders get 0 instead of NULL

Poin Pembahasan Wawancara

Ringkasan perangkat penggantian:

  • COALESCE(a, b, ...): argumen pertama yang bukan NULL, banyak argumen, standar ANSI, tipe ditentukan berdasarkan prioritas. Pilihan bawaan.
  • ISNULL / IFNULL / NVL: bentuk singkat vendor dengan dua argumen; ISNULL dapat memotong hasil ke tipe argumen pertama.
  • NULLIF(a, b): mengembalikan NULL ketika keduanya sama; berguna untuk mencegah pembagian dengan nol dan menormalkan teks kosong.
  • Gabungkan COALESCE(x / NULLIF(y, 0), 0) untuk menghasilkan pembagian yang aman dan mudah ditampilkan.

Awali dengan COALESCE dan sebutkan variasi vendor hanya jika dialeknya sudah ditentukan.

Pemeriksaan Singkat

Pilih ekspresi pembagian yang aman.

Ringkasan

Sekarang Anda dapat mengganti dan membuat NULL:

  • COALESCE mengembalikan argumen pertama yang bukan NULL dari banyak argumen; ini adalah pilihan bawaan yang portabel.
  • ISNULL (SQL Server), IFNULL (MySQL), dan NVL (Oracle) adalah bentuk singkat dengan dua argumen; ISNULL dapat memotong hasil ke tipe argumen pertama.
  • NULLIF(a, b) mengembalikan NULL ketika kedua nilai sama, ideal untuk mencegah pembagian dengan nol dan menormalkan teks kosong.
  • Gabungkan fungsi-fungsi tersebut untuk membuat ekspresi yang aman dan mudah ditampilkan, serta untuk mengganti NULL setelah LEFT JOIN dengan nilai bawaan.

Pelajaran terakhir: bagaimana NULL berperilaku dalam fungsi agregat, JOIN, dan DISTINCT.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “COALESCE, NULLIF, dan ISNULL” gratis?

Ya — teks lengkap “COALESCE, NULLIF, dan ISNULL” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Coding Interview Prep, upgrade ke CoddyKit PRO. Kursus Coding Interview Prep mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “COALESCE, NULLIF, dan ISNULL”?

Ganti nilai dengan nilai bawaan dan pahami perbedaan COALESCE dengan fungsi khusus vendor. Kamu berlatih Coding Interview Prep 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 Coding Interview Prep?

Tidak diperlukan pengalaman sebelumnya. Coding Interview Prep 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 3 dari 4.

Berapa lama pelajaran “COALESCE, NULLIF, dan ISNULL” 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 Coding Interview Prep ini?

Ya. Setiap pelajaran Coding Interview Prep 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

  1. Logika Tiga Nilai dan UNKNOWN
  2. IS NULL, IS NOT NULL, dan Kesetaraan yang Aman terhadap NULL
  3. COALESCE, NULLIF, dan ISNULL
  4. NULL dalam Agregat, JOIN, dan DISTINCT
← Kembali ke Coding Interview Prep