Vous souhaitez concaténer deux colonnes de chaînes ou plus en SQL ? Apprenez à utiliser la fonction SQL CONCAT pour concaténer des chaînes de caractères.

Lorsque vous interrogez une table de base de données, vous pouvez parfois avoir besoin de concaténer plusieurs colonnes de texte/chaîne de caractères au lieu d’extraire les données d’une seule colonne. Cette fonction est utile lorsque vous avez besoin d’un résultat plus facile à interpréter et à lire.

Par exemple, vous pouvez sélectionner un champ full_name en concaténant les champs first_name et last_name. De même, vous pouvez obtenir l’adresse complète en concaténant les champs rue, ville, état et autres champs nécessaires.

En SQL, vous pouvez utiliser la fonction CONCAT pour concaténer des chaînes de caractères. Dans ce guide, nous aborderons les points suivants :

  • La syntaxe de la fonction SQL CONCAT
  • Des exemples d’utilisation
  • La gestion des valeurs NULL dans une ou plusieurs colonnes lors de la concaténation

C’est parti pour un tour d’horizon !

Syntaxe de la fonction SQL CONCAT

La syntaxe pour utiliser la fonction SQL CONCAT est la suivante :

CONCAT(chaîne_1, chaîne_2, ..., chaîne_n) ;

Ici, string_1, string_2, …, string n désignent les chaînes à concaténer. Il peut s’agir de chaînes littérales ou de colonnes, ou d’une combinaison des deux.

Concaténation de chaînes littérales avec CONCAT

La fonction CONCAT pouvant également être utilisée pour concaténer des chaînes littérales, essayons de coder un exemple simple.

Ici, nous concaténons les chaînes “Hello,” et “world !” en tant que chaîne de salutation:

SELECT CONCAT('Hello, ', 'world!') AS greeting ;

L’exécution de la requête ci-dessus vous donnera le résultat suivant :

 --------------- 
| message d'accueil |
 --------------- 
| Bonjour, le monde ! |
 --------------- 
1 ligne dans le jeu (0.00 sec)

Dans la pratique, cependant, vous voudrez peut-être concaténer les colonnes requises dans une table de base de données et non des chaînes de caractères littérales. Nous allons donc coder quelques exemples en utilisant la fonction CONCAT en SQL.

Comment concaténer des colonnes en SQL

Passons maintenant à l’interrogation d’une table de base de données.

tous les exemples de requêtes de ce tutoriel ont été exécutés sur une table de base de données MySQL. Mais vous pouvez également suivre ce tutoriel avec un autre SGBDR de votre choix.

Création d’une table de base de données avec des enregistrements

Créons une base de données que nous pourrons utiliser :

CREATE DATABASE db1 ;
utilisez db1 ;

Créons une table ” employés ” dans la base de données db1. Pour ce faire, exécutez l’instruction CREATE TABLE avec les colonnes suivantes et les types de données correspondants :

CREATE TABLE employees (
    ID INT AUTO_INCREMENT PRIMARY KEY,
    prénom VARCHAR(50),
    nom_famille VARCHAR(50),
    rue VARCHAR(100),
    ville VARCHAR(50),
    état VARCHAR(2),
    nom d'utilisateur VARCHAR(20)
) ;

Insérons ensuite quelques enregistrements dans la table employees:

INSERT INTO employés (prénom, nom, rue, ville, état, nom d'utilisateur) VALUES
    ('John', 'Smith', '123 Main St', 'New York', 'NY', 'john123'),
    ('Alice', 'Johnson', '456 Elm St', 'Boston', 'MA', 'alice456'),
    ("Bob", "Williams", "789 Oak St", "Chicago", "IL", "bob789"),
    ("Mary", "Davis", "321 Pine St", "Houston", "TX", "mary456"),
    ("James", "Brown", "555 Cedar St", "Seattle", "WA", "james789"),
    ("Emily", "Jones", "777 Maple St", "Atlanta", "GA", "emily123"),
    ("Michael", "Miller", "999 Birch St", "Miami", "FL", "michael456"),
    ("Jessica", "Wilson", "111 Walnut St", "Dallas", "TX", "jessica789"),
    ('William', 'Taylor', '222 Cherry St', 'Denver', 'CO', 'william123'),
    ("Sarah", "Martinez", "444 Pine St", "Phoenix", "AZ", "sarah456") ;

Exemple 1 : Afficher les noms complets

Dans un premier exemple, concaténons les colonnes first_name et last_name pour obtenir le full_name. Pour ce faire, nous pouvons utiliser la fonction SQL CONCAT dans la requête SELECT comme indiqué :

SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM employees ;

Vous devriez obtenir le résultat suivant :

 ---------------- 
| nom_complet |
 ---------------- 
| John Smith
| Alice Johnson
| Bob Williams
| Mary Davis | James Brown
| James Brown | | James Brown | | James Brown
| Emily Jones | Michael Miller
| Michael Miller - Jessica Wilson - Michael Miller - Michael Miller - Jessica Wilson - Michael Miller - Michael Miller - Michael Miller - Jessica Wilson
| Jessica Wilson |
| William Taylor
| Sarah Martinez
 ---------------- 
10 lignes dans le jeu (0.00 sec)

Outre le prénom et le nom, vous remarquerez que nous avons également utilisé un espace comme séparateur, spécifié par la chaîne littérale ‘ ‘.

Exemple 2 : Construire des adresses

Prenons maintenant un autre exemple.

Nous disposons des colonnes rue, ville et état dans la table employés. Nous pouvons donc sélectionner l’adresse complète en concaténant ces trois champs avec une virgule comme séparateur :

SELECT CONCAT(rue, ', ', ville, ', ', état) AS full_address FROM employees ;

Voici le résultat :

 --------------------------- 
| adresse_complète |
 --------------------------- 
| 123 Main St, New York, NY | 456 Elm St, Boston, USA
| 456 Elm St, Boston, MA | 789 Oak St, Chicago, IL
| 789 Oak St, Chicago, IL | 321 Pine St, Houston, TX
| 321 Pine St, Houston, TX | 555 Cedar St, Seattle, TX
| 555 Cedar St, Seattle, WA | 777 Maple St, Atlanta, TX
atlanta, GA | 777 Maple St, Atlanta, GA | 999 Birch St, Miami, GA | 999 Birch St, Miami, USA
| 999 Birch St, Miami, FL | 111 Walnut St, Dallas, GA
| 111 Walnut St, Dallas, TX | 222 Cherry St, Denver, TX
| 222 Cherry St, Denver, CO | 444 Pine St, Phoenix, CO
| 444 Pine St, Phoenix, AZ |
 --------------------------- 
10 lignes dans le jeu (0.00 sec)

Exemple 3 : Création d’URL de profil

Rappelez-vous que nous avons un champ nom d'utilisateur dans la table employés.

Supposons que vous ayez un domaine racine https://www.example.com/ et que les profils des utilisateurs se trouvent à https://www.example.com/user. Vous pouvez générer l’URL du profil en utilisant la fonction CONCAT comme suit :

SELECT CONCAT('https://www.example.com/user/', nom d'utilisateur) AS profile_url 
FROM employés ;

Comme vous le voyez, nous obtenons les URL de profil de tous les employés :

 ----------------------------------------- 
| profile_url |
 ----------------------------------------- 
| https://www.example.com/user/john123 |
| https://www.example.com/user/alice456 |
| https://www.example.com/user/bob789 |
| https://www.example.com/user/mary456 |
| https://www.example.com/user/james789 |
| https://www.example.com/user/emily123 |
| https://www.example.com/user/michael456 |
| https://www.example.com/user/jessica789 |
| https://www.example.com/user/william123 |
| https://www.example.com/user/sarah456 |
 ----------------------------------------- 
10 lignes dans le jeu (0.00 sec)

Gestion des valeurs NULL

Dans la table employés, tous les enregistrements contiennent tous les champs. Mais que se passe-t-il si un ou plusieurs champs ont des valeurs NULL ?

Prenons un exemple pour ce cas. Ici, nous mettons à jour l’enregistrement correspondant à ID = 2 pour définir la colonne rue à NULL :

UPDATE employés
SET street = NULL
WHERE ID = 2 ; -- Mise à jour de l'enregistrement correspondant à l'ID 2
Requête OK, 1 ligne affectée (0.05 sec)
Lignes correspondantes : 1 Modifiées : 1 Avertissements : 0

Nous utilisons maintenant CONCAT pour sélectionner l’adresse complète:

SELECT CONCAT(rue, ', ', ville, ', ', état) AS full_address FROM employees ;

Voici le résultat :

 --------------------------- 
| Adresse_complète
 --------------------------- 
| 123 Main St, New York, NY | NULL
| NULL |
| 789 Oak St, Chicago, IL | 321 Pine St, Houston, TX
| 321 Pine St, Houston, TX | 555 Cedar St, Seattle, WA | 555 Cedar St, Seattle, WA
| 555 Cedar St, Seattle, WA | | 777 Maple St, Atlanta, GA
atlanta, GA | 777 Maple St, Atlanta, GA | 999 Birch St, Miami, WA
| 999 Birch St, Miami, FL | 111 Walnut St, Dallas, GA
| 111 Walnut St, Dallas, TX | 222 Cherry St, Denver, TX
| 222 Cherry St, Denver, CO | 444 Pine St, Phoenix, CO
| 444 Pine St, Phoenix, AZ |
 --------------------------- 
10 lignes dans le jeu (0.00 sec)

Remarquez que le deuxième élément du jeu de résultats est NULL.

Mais nous aurions aimé que le résultat soit la concaténation des colonnes ville et état pour avoir une idée approximative de l’adresse. Lorsque vous avez de telles valeurs NULL, vous pouvez utiliser CONCAT_WS comme alternative à la fonction CONCAT. Voyons comment cela fonctionne.

Utilisation de CONCAT_WS pour gérer les valeurs NULL lors de la concaténation

CONCAT_WS est une alternative à CONCAT qui peut être utilisée si vous soupçonnez un ou plusieurs champs de contenir des valeurs NULL.

Vous pouvez utiliser la fonction CONCAT_WS comme suit :

CONCAT_WS(separator, string_1, string_2,..., string_n)

Exécutez maintenant la requête SELECT suivante :

SELECT CONCAT_WS(', ', street, city, state) AS full_address FROM employees ;

Vous obtiendrez le résultat suivant :

 --------------------------- 
| adresse_complète |
 --------------------------- 
| 123 Main St, New York, NY
| Boston, MA |
| 789 Oak St, Chicago, IL | 321 Pine St, Houston, TX
| 321 Pine St, Houston, TX | 555 Cedar St, Seattle, WA
| 555 Cedar St, Seattle, WA | 777 Maple St, Atlanta, TX
atlanta, GA | 777 Maple St, Atlanta, GA | 999 Birch St, Miami, GA | 999 Birch St, Miami, GA
| 999 Birch St, Miami, FL | 111 Walnut St, Dallas, GA
| 111 Walnut St, Dallas, TX | 222 Cherry St, Denver, TX
| 222 Cherry St, Denver, CO | 444 Pine St, Phoenix, CO
| 444 Pine St, Phoenix, AZ |
 --------------------------- 
10 lignes dans le jeu (0.01 sec)

Comme on le voit, pour le deuxième élément de l’ensemble de résultats, on obtient ‘Boston MA’ car le champ street est NULL.

lorsque vous utilisez CONCAT_WS, vous devez spécifier le séparateur. Si vous ne spécifiez pas le séparateur, le résultat est NULL si une ou plusieurs colonnes sont NULL (similaire à CONCAT).

Récapitulation

Passons en revue ce que nous avons appris :

  • Lorsque vous interrogez une table de base de données pour récupérer des données, vous pouvez souhaiter concaténer plusieurs colonnes de chaînes afin d’obtenir des résultats de requête plus utiles et plus faciles à interpréter. Pour ce faire, vous pouvez utiliser la fonction CONCAT dans SQL avec la syntaxe CONCAT(chaîne_1, chaîne_2, ..., chaîne_n).
  • Vous pouvez concaténer des chaînes de caractères, des colonnes ou une combinaison des deux. Cependant, s’il y a une ou plusieurs valeurs NULL, le résultat pour cet enregistrement particulier est NULL. Pour gérer cette situation, vous pouvez utiliser CONCAT_WS avec la syntaxe CONCAT_WS(separator, string_1, string_2, ..., string_n).
  • CONCAT_WS traite les valeurs NULL de manière plus élégante en concaténant uniquement les chaînes de caractères présentes dans le séparateur spécifié.

Pour une révision rapide des commandes SQL et de leur utilisation, vous pouvez mettre en signet cette fiche d’aide SQL.