Comment utiliser la fonction COALESCE dans SQL Server

Avez-vous déjà rencontré une situation dans laquelle vous devez gérer des valeurs NULL dans vos requêtes ? Par exemple, vous souhaiterez peut-être afficher une valeur par défaut lorsqu'une colonne est NULL, ou combiner plusieurs colonnes en une seule et sélectionner la première valeur non NULL. Dans cet article de blog, nous allons vous montrer comment utiliser la fonction COALESCE dans SQL Server pour réaliser ces tâches et bien plus encore.

Qu'est-ce que la fonction COALESCE ?

La fonction COALESCE est une fonction intégrée à SQL Server qui évalue une liste d'expressions et renvoie la première qui n'est pas NULL. Si toutes les expressions sont NULL, alors la fonction renvoie NULL.

La syntaxe de la fonction COALESCE est :

COALESCE (expression1, expression2, ..., expressionN)

Les expressions peuvent être de n’importe quel type, mais elles doivent être compatibles entre elles. Le type de données du résultat est déterminé par l'expression ayant la priorité la plus élevée.

Comment utiliser la fonction COALESCE

Voyons quelques exemples d'utilisation de la fonction COALESCE dans SQL Server.

Exemple 1 : Afficher une valeur par défaut lorsqu'une colonne est NULL

Supposons que nous ayons une table appelée Products qui stocke des informations sur certains produits, telles que leur nom, leur prix et leur catégorie. Certains produits n'ont pas de catégorie attribuée, donc la colonne Category est NULL pour eux.

Si nous voulons afficher les produits avec leurs catégories, mais remplacer les valeurs NULL par une valeur par défaut telle que « Inconnu », nous pouvons utiliser la fonction COALESCE comme suit :

SELECT Name, Price, COALESCE(Category, 'Unknown') AS Category
FROM Products;

Le résultat est:

Comme vous pouvez le voir, la fonction COALESCE renvoie la valeur de Category si elle n'est pas NULL, sinon elle renvoie « Inconnu ».

Exemple 2 : combinez plusieurs colonnes en une seule et choisissez la première valeur non NULL

Supposons que nous ayons une autre table appelée Contacts qui stocke des informations sur certains contacts, telles que leur nom, leur adresse e-mail, leur téléphone et leur adresse. Certains contacts n'ont pas tous ces détails renseignés, donc certaines colonnes sont NULLes pour eux.

Si nous souhaitons afficher les contacts avec leur méthode de contact préférée, qui est la première valeur non NULL parmi l'e-mail, le téléphone et l'adresse, nous pouvons utiliser la fonction COALESCE comme suit :

SELECT Name, COALESCE(Email, Phone, Address) AS PreferredContact
FROM Contacts;

Le résultat est:

Comme vous pouvez le voir, la fonction COALESCE renvoie la première valeur non NULL parmi l'e-mail, le téléphone et l'adresse de chaque contact.

Comment gérer cela à l'ancienne et ce que COALESCE fournit

Avant l'introduction de la fonction COALESCE dans SQL Server, nous devions utiliser d'autres méthodes pour gérer les valeurs NULL dans nos requêtes. Par exemple, nous pourrions utiliser la fonction ISNULL ou l'expression CASE.

La fonction ISNULL prend deux arguments et renvoie le premier s'il n'est pas NULL, sinon elle renvoie le second. Par exemple:

SELECT Name, ISNULL(Category, 'Unknown') AS Category
FROM Products;

Cette requête produit le même résultat que l'utilisation de COALESCE avec deux arguments. Cependant, il existe quelques différences entre ISNULL et COALESCE :

  • ISNULL n'accepte que deux arguments, tandis que COALESCE peut en accepter n'importe quel nombre.
  • ISNULL utilise le type de données du premier argument pour le résultat, tandis que COALESCE suit les règles d'expression CASE et renvoie le type de données de la valeur avec la priorité la plus élevée.
  • ISNULL n'est évalué qu'une seule fois, tandis que COALESCE peut être évalué plusieurs fois. Cela peut affecter les performances et la cohérence des résultats, notamment lors de l'utilisation de sous-requêtes ou de fonctions non déterministes.

L'expression CASE est une expression conditionnelle qui nous permet d'effectuer différentes actions en fonction de différentes conditions. Par exemple:

SELECT Name, CASE WHEN Category IS NOT NULL THEN Category ELSE 'Unknown' END AS Category
FROM Products;w

Cette requête produit le même résultat que l'utilisation de COALESCE avec deux arguments. Il existe cependant quelques différences entre CASE et COALESCE :

  • CASE est plus verbeux et complexe que COALESCE, en particulier lorsqu'il s'agit d'expressions multiples.
  • CASE peut gérer une logique et des conditions plus complexes que COALESCE, qui vérifie uniquement les valeurs NULL.
  • CASE et COALESCE peuvent avoir des implications différentes en termes de performances en fonction de l'optimiseur de requêtes et du plan d'exécution.

Comme vous pouvez le constater, la fonction COALESCE fournit un moyen plus simple et plus cohérent de gérer les valeurs NULL dans SQL Server. Elle est également plus flexible et compatible que la fonction ISNULL ou l'expression CASE.

Conclusion

Dans cet article de blog, nous avons appris à utiliser la fonction COALESCE dans SQL Server pour gérer les valeurs NULL dans nos requêtes. Nous avons vu quelques exemples sur la façon d'afficher une valeur par défaut lorsqu'une colonne est NULL, ou de combiner plusieurs colonnes en une seule et de sélectionner la première valeur non NULL. Nous avons également comparé la fonction COALESCE avec d'autres méthodes telles que ISNULL et CASE, et discuté de leurs avantages et inconvénients.