SQL COALESCE Function

Summary: in this tutorial, you’ll learn how to use the SQL COALESCE() function to handle NULL effectively.

Introduction to the SQL COALESCE function #

In SQL, the COALESCE() function takes one or more arguments and returns the first non-NULL argument.

Here’s the syntax of the COALESCE function:

COALESCE(argument1, argument2,...);Code language: SQL (Structured Query Language) (sql)

The COALESCE function evaluates its arguments from left to right and returns the first non-NULL argument.

The COALESCE function will return NULL in case all input arguments are NULL.

Basic SQL COALESCE function examples #

The following example shows how to use the COALESCE function with numbers 1, 2, and 3:

SELECT
  COALESCE(1, 2, 3) AS result;Code language: SQL (Structured Query Language) (sql)

Try it

Output:

 result
--------
      1Code language: SQL (Structured Query Language) (sql)

The result is 1 because it is the first non-NULL argument.

The following statement returns the string SQL because it is the first non-NULL argument.

SELECT
  COALESCE(NULL, 'SQL', 'Tutorial') AS result;Code language: SQL (Structured Query Language) (sql)

Try it

Output:

 result
--------
 SQLCode language: SQL (Structured Query Language) (sql)

Short-circuit evaluation #

If you divide by zero, you’ll encounter an error:

SELECT 1/0;Code language: SQL (Structured Query Language) (sql)

Try it

Output:

ERROR:  division by zeroCode language: SQL (Structured Query Language) (sql)

But the following statement returns one instead of an error:

SELECT
  COALESCE(1, 1 / 0) result;Code language: SQL (Structured Query Language) (sql)

Try it

Output:

 result
--------
      1Code language: SQL (Structured Query Language) (sql)

The reason is that the COALESCE function uses short-circuit evaluation. It means that the COALESCE function does not evaluate the remaining arguments after it encounters the first non-NULL arguments.

Using SQL COALESCE function to substitute NULL #

First, create a new table called bonuses to store employee bonuses:

CREATE TABLE bonuses (
  employee_id INT PRIMARY KEY,
  amount DECIMAL(10, 2) NULL
);Code language: SQL (Structured Query Language) (sql)

Try it

Some employees may have bonuses so that the amount column can be NULL.

Second, insert some rows into the bonuses table:

INSERT INTO
  bonuses (employee_id, amount)
VALUES
  (101, 1000.00),
  (102, NULL),
  (103, 1500.00),
  (104, NULL),
  (105, 2000.00);Code language: SQL (Structured Query Language) (sql)

Try it

Third, use the COALESCE function to replace NULL with zero when calculating the total compensation that includes both salary and bonus:

SELECT
  e.first_name,
  e.last_name,
  e.salary,
  e.salary + COALESCE(b.amount, 0) AS total_compensation
FROM
  employees e
  LEFT JOIN bonuses b ON e.employee_id = b.employee_id;Code language: SQL (Structured Query Language) (sql)

Try it

Output:

 first_name  |  last_name  |  salary  | total_compensation
-------------+-------------+----------+--------------------
 Neena       | Kochhar     | 17000.00 |           18000.00
 Lex         | De Haan     | 17000.00 |           17000.00
 Alexander   | Hunold      |  9000.00 |           10500.00
 Bruce       | Ernst       |  6000.00 |            6000.00
...Code language: SQL (Structured Query Language) (sql)

SQL COALESCE and CASE expression #

The COALESCE function is functionally equivalent to the following CASE expression:

CASE
  WHEN (argument1 IS NOT NULL) THEN argument1
  WHEN (argument2 IS NOT NULL) THEN argument2
  ELSE argument3
ENDCode language: SQL (Structured Query Language) (sql)

The following query uses the CASE expression instead of the COALESCE function:

SELECT
  e.first_name,
  e.last_name,
  e.salary,
  e.salary + CASE
    WHEN b.amount IS NULL THEN 0
    ELSE b.amount
  END AS total_compensation
FROM
  employees e
  LEFT JOIN bonuses b ON e.employee_id = b.employee_id;Code language: SQL (Structured Query Language) (sql)

Try it

Output:

 first_name  |  last_name  |  salary  | total_compensation
-------------+-------------+----------+--------------------
 Neena       | Kochhar     | 17000.00 |           18000.00
 Lex         | De Haan     | 17000.00 |           17000.00
 Alexander   | Hunold      |  9000.00 |           10500.00
 Bruce       | Ernst       |  6000.00 |            6000.00
...Code language: SQL (Structured Query Language) (sql)

Summary #

  • Use the SQL COALESCE function to return the first non-NULL argument from a list of arguments.

Quiz #

Databases #

Was this tutorial helpful ?