🧚 Dengar! Beekeeper Studio adalah GUI database yang cepat, modern, dan open source Unduh
6 Januari 2026 Oleh Matthew Rathbone

COALESCE mengembalikan nilai pertama dalam daftarnya yang bukan NULL. Inilah cara SQL mengganti nilai yang hilang dengan nilai cadangan. Contoh-contohnya berjalan di PostgreSQL, MySQL, SQLite, dan SQL Server.

Cara menggunakan COALESCE

Berikan COALESCE nilai sebanyak apa pun. Fungsi ini memeriksanya dari kiri ke kanan dan mengembalikan nilai pertama yang bukan NULL, atau NULL jika semuanya NULL:

COALESCE(value1, value2, ...)
SELECT COALESCE(NULL, 'second', 'third');
-- Output: second

SELECT COALESCE(NULL, NULL);
-- Output: NULL

Dalam query nyata, nilainya biasanya berupa kolom, dengan literal di akhir sebagai pilihan terakhir:

-- Input: users
-- id | name         | nickname
-- ---+--------------+---------
-- 1  | Maria Garcia | Mia
-- 2  | Tom Becker   | NULL
-- 3  | Priya Shah   | P

SELECT id, name, COALESCE(nickname, name) AS display_name
FROM users;

-- Output:
-- id | name         | display_name
-- ---+--------------+-------------
-- 1  | Maria Garcia | Mia
-- 2  | Tom Becker   | Tom Becker
-- 3  | Priya Shah   | P

Aturan yang perlu diketahui

  • Ia berhenti di nilai non-NULL pertama, sehingga argumen berikutnya tidak dievaluasi begitu satu nilai ditemukan. Letakkan nilai yang paling sering terisi di urutan pertama.
  • Setiap argumen harus bertipe kompatibel. Mencampur angka dengan teks akan gagal di PostgreSQL dan SQL Server, jadi lakukan cast terlebih dahulu:
-- Input: products
-- name         | stock
-- -------------+------
-- Desk Lamp    | 12
-- Office Chair | NULL

SELECT name, COALESCE(stock, 'N/A') AS stock FROM products;
-- PostgreSQL: ERROR: invalid input syntax for type integer: "N/A"
-- SQL Server: Conversion failed when converting the varchar value 'N/A' to data type int.

-- (in MySQL, cast with CAST(stock AS CHAR))
SELECT name, COALESCE(CAST(stock AS VARCHAR(10)), 'N/A') AS stock FROM products;

-- Output:
-- name         | stock
-- -------------+------
-- Desk Lamp    | 12
-- Office Chair | N/A
  • String kosong bukan NULL. COALESCE meloloskan '' begitu saja. Bungkus kolom dengan NULLIF(column, '') agar string kosong juga dianggap hilang:
SELECT COALESCE('', 'No name');
-- Output: '' (an empty string)

SELECT COALESCE(NULLIF('', ''), 'No name');
-- Output: No name

Sintaks alternatif

Anda juga akan menemui pintasan dua argumen: IFNULL di MySQL dan SQLite, serta ISNULL di SQL Server:

SELECT IFNULL(NULL, 'fallback');
-- Output: fallback

Sebaiknya gunakan COALESCE. Fungsi ini menerima argumen sebanyak apa pun, sedangkan ISNULL di SQL Server memberi hasilnya tipe argumen pertama, yang bisa memotong nilai cadangan Anda:

-- SQL Server
DECLARE @code VARCHAR(2) = NULL;
SELECT ISNULL(@code, 'none') AS with_isnull, COALESCE(@code, 'none') AS with_coalesce;

-- Output:
-- with_isnull | with_coalesce
-- ------------+--------------
-- no          | none

Ekspresi CASE bisa melakukan hal yang sama, hanya lebih panjang: COALESCE(nickname, name) adalah singkatan dari CASE WHEN nickname IS NOT NULL THEN nickname ELSE name END. Lihat panduan pernyataan SQL CASE untuk saat Anda butuh kemampuan lebih.

Kapan sebaiknya menggunakan COALESCE?

Gunakan COALESCE setiap kali NULL akan membuat hasil Anda salah, jelek, atau kosong. Sebagian besar penggunaannya masuk ke salah satu dari empat kategori ini.

Beralih ke kolom lain

Saat nilai yang Anda cari ada di salah satu dari beberapa kolom, COALESCE memilih yang pertama terisi: nama panggilan atau nama lengkap, nomor ponsel atau telepon rumah, alamat pengiriman atau alamat penagihan.

Gunakan nilai default saat semua nilai kosong

Letakkan literal di akhir daftar, dan hasilnya tidak akan pernah NULL. Inilah yang Anda inginkan untuk laporan dan tampilan, di mana “Address Unknown” atau 0.00 lebih enak dibaca daripada kolom kosong.

Isi kekosongan dengan nilai hasil perhitungan

Nilai cadangan tidak harus berupa kolom atau konstanta. Bisa juga berupa ekspresi, misalnya username atau alamat email yang dibentuk dari kolom lain, sehingga COALESCE sangat berguna untuk merapikan data hasil impor.

Jauhkan NULL dari perhitungan

Aritmetika apa pun dengan NULL menghasilkan NULL, sehingga diskon atau bonus yang kosong menghapus seluruh total. COALESCE(discount, 0) mengubah nilai yang hilang menjadi angka yang bisa dipakai dalam perhitungan.

Contoh nyata COALESCE

Tampilkan harga, apa pun yang tersedia

Produk bisa punya harga diskon, harga normal, atau (sebelum peluncuran) tidak keduanya. Periksa secara berurutan dan gunakan nol sebagai default:

-- Input: products
-- product_id | name          | sale_price | regular_price
-- -----------+---------------+------------+--------------
-- 1          | Desk Lamp     | 19.99      | 24.99
-- 2          | Office Chair  | NULL       | 149.00
-- 3          | Standing Desk | NULL       | NULL

SELECT product_id, name, COALESCE(sale_price, regular_price, 0.00) AS price
FROM products;

-- Output:
-- product_id | name          | price
-- -----------+---------------+-------
-- 1          | Desk Lamp     | 19.99
-- 2          | Office Chair  | 149.00
-- 3          | Standing Desk | 0.00

Pilih nomor telepon terbaik untuk dihubungi

Kontak memiliki hingga tiga nomor. Tampilkan nomor pertama yang tersedia, dan beri keterangan jika tidak ada:

-- Input: contacts
-- name | primary_phone | mobile_phone | work_phone
-- -----+---------------+--------------+-----------
-- Ada  | 555-0101      | 555-0199     | NULL
-- Bo   | NULL          | 555-0142     | 555-0177
-- Cy   | NULL          | NULL         | 555-0123
-- Di   | NULL          | NULL         | NULL

SELECT name, COALESCE(primary_phone, mobile_phone, work_phone, 'No phone') AS phone
FROM contacts;

-- Output:
-- name | phone
-- -----+---------
-- Ada  | 555-0101
-- Bo   | 555-0142
-- Cy   | 555-0123
-- Di   | No phone

Buat alamat email pengganti

Karyawan yang tidak punya email tercatat akan mendapat email yang dibentuk dari namanya, sehingga setiap baris di direktori memiliki nilai:

-- Input: employees
-- employee_id | first_name | last_name | email
-- ------------+------------+-----------+-----------------
-- 1           | Grace      | Hopper    | ghopper@navy.mil
-- 2           | Alan       | Turing    | NULL

SELECT
  employee_id,
  first_name || ' ' || last_name AS full_name,
  COALESCE(
    email,
    LOWER(first_name) || '.' || LOWER(last_name) || '@company.com'
  ) AS email
FROM employees;

-- Output:
-- employee_id | full_name    | email
-- ------------+--------------+------------------------
-- 1           | Grace Hopper | ghopper@navy.mil
-- 2           | Alan Turing  | alan.turing@company.com

Di MySQL dan SQL Server, gabungkan string dengan CONCAT() alih-alih ||.

Hitung total pesanan saat diskon bersifat opsional

Tanpa COALESCE, satu baris tanpa diskon membuat total seluruh pesanan menjadi salah, karena SUM melewati baris NULL sepenuhnya:

-- Input: order_items
-- order_id | product  | quantity | unit_price | discount
-- ---------+----------+----------+------------+---------
-- 101      | Keyboard | 1        | 49.00      | 5.00
-- 101      | Mouse    | 2        | 19.50      | NULL
-- 102      | Monitor  | 1        | 189.00     | NULL
-- 102      | Cable    | 3        | 6.00       | 2.00

-- Wrong: lines with a NULL discount drop out of the total
SELECT order_id, SUM(quantity * unit_price - discount) AS total
FROM order_items
GROUP BY order_id
ORDER BY order_id;

-- Output:
-- order_id | total
-- ---------+------
-- 101      | 44.00
-- 102      | 16.00

-- Right: a missing discount counts as 0
SELECT order_id, SUM(quantity * unit_price - COALESCE(discount, 0)) AS total
FROM order_items
GROUP BY order_id
ORDER BY order_id;

-- Output:
-- order_id | total
-- ---------+-------
-- 101      | 83.00
-- 102      | 205.00

Bacaan lanjutan tentang COALESCE

Di blog ini:

Dokumentasi resmi:

Beekeeper Studio Adalah GUI Database Gratis & Open Source

Tool query & editor SQL terbaik yang pernah saya pakai. Semua yang saya butuhkan untuk mengelola database ada di sini. - ⭐⭐⭐⭐⭐ Mit

Beekeeper Studio cepat, intuitif, dan mudah digunakan. Beekeeper mendukung banyak sekali database, dan berjalan mulus di Windows, Mac, dan Linux.

Versi Linux Beekeeper punya fitur 100% lengkap, tanpa potong kompas, tanpa kompromi fitur.

Apa Kata Pengguna tentang Beekeeper Studio

★★★★★
"Beekeeper Studio benar-benar menggantikan alur kerja SQL lama saya. Cepat, intuitif, dan membuat pekerjaan database kembali menyenangkan."
— Alex K., Database Developer
★★★★★
"Saya sudah mencoba banyak GUI database, tetapi Beekeeper punya keseimbangan sempurna antara fitur dan kesederhanaan. Langsung jalan."
— Sarah M., Full Stack Engineer

Siap Meningkatkan Alur Kerja SQL Anda?

download Unduh Gratis