Comprendre CONCAT en SQL : un guide de base pour les débutants
Je veux concatenate deux colonnes de chaîne ou plus dans SQL ? Apprenez à utiliser la fonction SQL CONCAT pour concatenate cordes.
When you query a database table, you may sometimes need to concatenate multiple text/string columns instead of retrieving data from a single column. This is helpful when you need an easier-to-interpret and readable output.
Par exemple, vous pouvez sélectionner un full_name
field by concatenating the first_name
et last_name
des champs. De même, vous pouvez obtenir le full_address
by concatenating the street, city, state, and other necessary fields.
In SQL, you can use the CONCAT function to concatenate strings. In this guide, we’ll go over:
- La syntaxe de la fonction SQL CONCAT
- Exemples d'utilisation
- Handling NULL values in one or more columns during concatenation
Commençons!
Syntaxe de la fonction SQL CONCAT
La syntaxe pour utiliser la fonction SQL CONCAT est la suivante :
CONCAT(string_1, string_2, ..., string_n);
Ici, string_1
, string_2
, ..., string n
denote the strings to be concatenated. These can be string literals or columns or a combination of both.
Concatenating String Literals with CONCAT
Because the CONCAT function can also be used to concatenate string literals, let’s try to code a simple example.
Here we concatenate the strings ‘Hello, ‘ and ‘world!’ as the greeting
chaîne:
SELECT CONCAT('Hello, ', 'world!') AS greeting;
L'exécution de la requête ci-dessus vous donnera le résultat suivant :
+---------------+
| greeting |
+---------------+
| Hello, world! |
+---------------+
1 row in set (0.00 sec)
In practice, however, you may want to concatenate the required columns in a database table and not string literals. So let’s code some examples using the CONCAT function in SQL.
Comment concilieratenate Columns in SQL
Passons ensuite à 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 un MySQL table de base de données. Mais vous pouvez également suivre dans un autre SGBDR de votre choix.
Création d'une table de base de données avec des enregistrements
Créonsate a database that we can use:
CREATE DATABASE db1;
use db1;
Créonsate an employees
table dans la base de données db1
. Pour ce faire, exécutez le CREATE TABLE
statement with the following columns and corresponding data types:
CREATE TABLE employees (
ID INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
street VARCHAR(100),
city VARCHAR(50),
state VARCHAR(2),
username VARCHAR(20)
);
Ensuite, insérons quelques enregistrements dans le employees
table:
INSERT INTO employees (first_name, last_name, street, city, state, username) 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');
1 Exemple: Afficher les noms complets
As a first example, let’s concatenate le first_name
les nouveautés last_name
colonnes 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 la sortie suivante:
+----------------+
| full_name |
+----------------+
| John Smith |
| Alice Johnson |
| Bob Williams |
| Mary Davis |
| James Brown |
| Emily Jones |
| Michael Miller |
| Jessica Wilson |
| William Taylor |
| Sarah Martinez |
+----------------+
10 rows in set (0.00 sec)
En plus de la first_name
les nouveautés last_name
, notez que nous avons également utilisé l'espace comme séparateur, spécifié par la chaîne littérale « ».
2 Exemple: Construire des adresses
Prenons maintenant un autre exemple.
Nous avons les street
, city
et state
colonnes dans le employees
tableau. Nous pouvons donc sélectionner le full_address
by concatenating these three fields with a comma as the separator:
SELECT CONCAT(street, ', ', city, ', ', state) AS full_address FROM employees;
Voici la sortie:
+---------------------------+
| full_address |
+---------------------------+
| 123 Main St, New York, NY |
| 456 Elm St, Boston, MA |
| 789 Oak St, Chicago, IL |
| 321 Pine St, Houston, TX |
| 555 Cedar St, Seattle, WA |
| 777 Maple St, Atlanta, GA |
| 999 Birch St, Miami, FL |
| 111 Walnut St, Dallas, TX |
| 222 Cherry St, Denver, CO |
| 444 Pine St, Phoenix, AZ |
+---------------------------+
10 rows in set (0.00 sec)
3 Exemple: Create Profile URLs
Rappelons que nous avons un username
dans le champ employees
tableau.
Disons que vous avez un domaine racine https://www.example.com/
Et l'utilisateur profiles are at https://www.example.com/user
. Vous pouvez générerate le profile_url
en utilisant la fonction CONCAT comme ceci :
SELECT CONCAT('https://www.example.com/user/', username) AS profile_url
FROM employees;
As seen, we get the profile URLs for all the employees:
+-----------------------------------------+
| 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 rows in set (0.00 sec)
Gestion des valeurs NULL
Dans la table des employés, tous les enregistrements ont TOUTE les champs. Mais que se passe-t-il si vous avez un ou plusieurs champs avec des valeurs NULL ?
Prenons un exemple pour ce cas. Ici nous update l'enregistrement correspondant à ID = 2 pour mettre la colonne rue à NULL :
UPDATE employees
SET street = NULL
WHERE ID = 2; -- Update the record with ID 2
Query OK, 1 row affected (0.05 sec)
Rows matched: 1 Changed: 1 Warnings: 0
Nous utilisons maintenant CONCAT pour sélectionner le full_address
:
SELECT CONCAT(street, ', ', city, ', ', state) AS full_address FROM employees;
Voici la sortie:
+---------------------------+
| full_address |
+---------------------------+
| 123 Main St, New York, NY |
| NULL |
| 789 Oak St, Chicago, IL |
| 321 Pine St, Houston, TX |
| 555 Cedar St, Seattle, WA |
| 777 Maple St, Atlanta, GA |
| 999 Birch St, Miami, FL |
| 111 Walnut St, Dallas, TX |
| 222 Cherry St, Denver, CO |
| 444 Pine St, Phoenix, AZ |
+---------------------------+
10 rows in set (0.00 sec)
Notez que le deuxième élément du jeu de résultats est NULL.
But we’d have liked the output to be the concatenation of the city
les nouveautés state
colonnes 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 voir comment ça fonctionne.
Using CONCAT_WS to Handle NULL Values During Concatenation
CONCAT_WS est une alternative à CONCAT qui peut être utilisée si vous pensez qu'un ou plusieurs champs contiennent des valeurs NULL.
Vous pouvez utiliser la fonction CONCAT_WS comme ceci :
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 :
+---------------------------+
| full_address |
+---------------------------+
| 123 Main St, New York, NY |
| Boston, MA |
| 789 Oak St, Chicago, IL |
| 321 Pine St, Houston, TX |
| 555 Cedar St, Seattle, WA |
| 777 Maple St, Atlanta, GA |
| 999 Birch St, Miami, FL |
| 111 Walnut St, Dallas, TX |
| 222 Cherry St, Denver, CO |
| 444 Pine St, Phoenix, AZ |
+---------------------------+
10 rows in set (0.01 sec)
Comme on le voit, pour le deuxième élément du jeu de résultats, nous obtenons « Boston MA » comme street
le champ est NULL.
⚠ Lorsque vous utilisez CONCAT_WS, c'est conditions pour spécifier le séparateur. Si vous ne spécifiez pas de séparateur, le résultat est NULL si une ou plusieurs colonnes sont NULL (similaire à CONCAT).
Récapitulation
LET revRegardez ce que nous avons appris :
- When you are querying a database table to retrieve data, you may want to concatenate multiple string columns to get more helpful and easy-to-interpret query results. To do so, you can use the CONCAT function in SQL with the syntax
CONCAT(string_1, string_2, ..., string_n)
. - Vous pouvez concatenate string literals, columns, or a combination of both. However, if there are one or more NULL values, the result for that particular record is NULL. To handle this, you can use
CONCAT_WS
avec la syntaxeCONCAT_WS(separator, string_1, string_2, ..., string_n)
. CONCAT_WS
handles NULL values more gracefully by concatenating only those strings which are present using the specified separator.
Pour rapide revvue des commandes SQL et de leur utilisation, vous pouvez ajouter ceci à vos favoris Aide-mémoire SQL.