🧚 Écoute ! Beekeeper Studio est une interface de base de données rapide, moderne et open source Télécharger
6 janvier 2026 Par Matthew Rathbone

COALESCE renvoie la première valeur de sa liste qui n’est pas NULL. C’est la façon dont SQL remplace une valeur manquante par une valeur de repli. Les exemples fonctionnent dans PostgreSQL, MySQL, SQLite et SQL Server.

Comment utiliser COALESCE

Passe à COALESCE autant de valeurs que tu veux. Il les vérifie de gauche à droite et renvoie la première qui n’est pas NULL, ou NULL si elles le sont toutes :

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

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

Dans une vraie requête, les valeurs sont généralement des colonnes, avec un littéral à la fin en dernier recours :

-- 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

Les règles à connaître

  • Il s’arrête à la première valeur non NULL, donc les arguments suivants ne sont pas évalués une fois qu’une valeur est trouvée. Mets en premier la valeur la plus souvent renseignée.
  • Tous les arguments doivent avoir un type compatible. Mélanger un nombre et du texte échoue dans PostgreSQL et SQL Server, alors fais d’abord un cast :
-- 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
  • Une chaîne vide n’est pas NULL. COALESCE laisse passer '' tel quel. Entoure la colonne de NULLIF(column, '') pour traiter aussi les chaînes vides comme manquantes :
SELECT COALESCE('', 'No name');
-- Output: '' (an empty string)

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

Syntaxe alternative

Tu verras aussi des raccourcis à deux arguments : IFNULL dans MySQL et SQLite, et ISNULL dans SQL Server :

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

Préfère COALESCE. Il accepte autant d’arguments que tu veux, et le ISNULL de SQL Server donne à son résultat le type du premier argument, ce qui peut tronquer ta valeur de repli :

-- 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

Une expression CASE peut faire le même travail, en plus long : COALESCE(nickname, name) est un raccourci pour CASE WHEN nickname IS NOT NULL THEN nickname ELSE name END. Consulte le guide de l’instruction CASE en SQL quand tu as besoin de plus de puissance.

Quand utiliser COALESCE ?

Utilise COALESCE dès qu’un NULL rendrait ton résultat faux, moche ou vide. La plupart des usages entrent dans l’un de ces quatre cas.

Se rabattre sur une autre colonne

Quand la valeur que tu cherches se trouve dans l’une de plusieurs colonnes, COALESCE prend la première qui est renseignée : un surnom ou un nom complet, un portable ou un fixe, une adresse de livraison ou de facturation.

Utiliser une valeur par défaut quand tout manque

Mets un littéral à la fin de la liste et le résultat ne sera jamais NULL. C’est ce qu’il te faut pour les rapports et les écrans, où « Adresse inconnue » ou 0.00 se lit mieux qu’un vide.

Combler les trous avec une valeur calculée

La valeur de repli n’a pas besoin d’être une colonne ou une constante. Ça peut être une expression, comme un nom d’utilisateur ou une adresse email construits à partir d’autres colonnes, ce qui rend COALESCE pratique pour nettoyer des données importées.

Garder les NULL hors des calculs

Toute opération arithmétique avec un NULL donne NULL, donc une remise ou une prime manquante efface tout le total. COALESCE(discount, 0) transforme la valeur manquante en un nombre utilisable par le calcul.

Exemples concrets de COALESCE

Afficher un prix, quel que soit celui enregistré

Les produits peuvent avoir un prix soldé, un prix normal ou (avant le lancement) aucun des deux. Vérifie-les dans l’ordre et mets zéro par défaut :

-- 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

Choisir le meilleur numéro à appeler

Les contacts ont jusqu’à trois numéros. Affiche le premier disponible, et indique-le quand il n’y en a aucun :

-- 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

Générer une adresse email provisoire

Les employés sans email enregistré en reçoivent un construit à partir de leur nom, pour que chaque ligne de l’annuaire ait une valeur :

-- 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

Dans MySQL et SQL Server, concatène les chaînes avec CONCAT() au lieu de ||.

Calculer le total d’une commande avec des remises optionnelles

Sans COALESCE, une seule ligne sans remise fausse le total de toute la commande, car SUM ignore complètement les lignes NULL :

-- 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

Pour aller plus loin avec COALESCE

Sur ce blog :

Documentation officielle :

Beekeeper Studio est une interface de base de données gratuite & open source

Le meilleur outil de requêtes & éditeur SQL que j’aie jamais utilisé. Il m’offre tout ce dont j’ai besoin pour gérer ma base de données. - ⭐⭐⭐⭐⭐ Mit

Beekeeper Studio est rapide, intuitif et facile à utiliser. Beekeeper prend en charge plein de bases de données et fonctionne parfaitement sous Windows, Mac et Linux.

La version Linux de Beekeeper est 100% complète : rien de bâclé, aucun compromis sur les fonctionnalités.

Ce que les utilisateurs disent de Beekeeper Studio

★★★★★
« Beekeeper Studio a complètement remplacé mon ancien workflow SQL. C’est rapide, intuitif, et ça rend le travail sur les bases de données agréable à nouveau. »
— Alex K., développeur de bases de données
★★★★★
« J’ai essayé beaucoup d’interfaces de bases de données, mais Beekeeper trouve l’équilibre parfait entre fonctionnalités et simplicité. Ça marche, tout simplement. »
— Sarah M., ingénieure full stack