Una guida di base per principianti

Vuoi concatenare due o più colonne stringa in SQL? Scopri come utilizzare la funzione SQL CONCAT per concatenare stringhe.

Quando esegui una query su una tabella di database, a volte potrebbe essere necessario concatenare più colonne di testo/stringa invece di recuperare i dati da una singola colonna. Ciò è utile quando è necessario un output più facile da interpretare e leggibile.

Ad esempio, puoi selezionare un campo nome completo concatenando i campi nome e cognome. Allo stesso modo, puoi ottenere full_address concatenando via, città, stato e altri campi necessari.

In SQL è possibile utilizzare la funzione CONCAT per concatenare le stringhe. In questa guida esamineremo:

  • La sintassi della funzione SQL CONCAT
  • Esempi di utilizzo
  • Gestione dei valori NULL in una o più colonne durante la concatenazione

Iniziamo!

Sintassi della funzione SQL CONCAT

La sintassi per utilizzare la funzione SQL CONCAT è la seguente:

CONCAT(string_1, string_2, ..., string_n);

Qui, string_1, string_2, …, string n denotano le stringhe da concatenare. Possono essere stringhe letterali o colonne o una combinazione di entrambi.

Concatenazione di stringhe letterali con CONCAT

Poiché la funzione CONCAT può essere utilizzata anche per concatenare stringhe letterali, proviamo a codificare un semplice esempio.

Qui concateniamo le stringhe ‘Hello, ‘ e ‘world!’ come stringa di saluto:

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

L’esecuzione della query precedente ti darà il seguente output:

+---------------+
| greeting      |
+---------------+
| Hello, world! |
+---------------+
1 row in set (0.00 sec)

In pratica, tuttavia, potresti voler concatenare le colonne richieste in una tabella di database e non le stringhe letterali. Quindi codifichiamo alcuni esempi utilizzando la funzione CONCAT in SQL.

Come concatenare colonne in SQL

Passiamo quindi all’esecuzione di query su una tabella del database.

📑 Tutte le query di esempio in questo tutorial sono state eseguite su a MySQL tabella del database. Ma puoi anche seguire un altro RDBMS di tua scelta.

Creazione di una tabella di database con record

Creiamo un database che possiamo utilizzare:

CREATE DATABASE db1;
use db1;

Creiamo una tabella impiegati nel database db1. Per fare ciò, esegui l’istruzione CREATE TABLE con le seguenti colonne e i tipi di dati corrispondenti:

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

Successivamente, inseriamo alcuni record nella tabella dei dipendenti:

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');

Esempio 1: Visualizza nomi completi

Come primo esempio, concateniamo le colonne first_name e last_name per ottenere il full_name. Per fare ciò, possiamo utilizzare la funzione SQL CONCAT nella query SELECT come mostrato:

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

Dovresti ottenere il seguente output:

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

Oltre al nome e al cognome, notate che abbiamo utilizzato anche lo spazio come separatore, specificato dalla stringa letterale ‘ ‘.

Esempio 2: costruire indirizzi

Ora facciamo un altro esempio.

Nella tabella dei dipendenti sono presenti le colonne via, città e stato. Quindi possiamo selezionare full_address concatenando questi tre campi con una virgola come separatore:

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

Ecco l’output:

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

Esempio 3: creazione degli URL del profilo

Ricordiamo che abbiamo un campo nome utente nella tabella dipendenti.

Supponiamo che tu abbia un dominio principale https://www.example.com/ e che i profili utente siano su https://www.example.com/user. Puoi generare profile_url utilizzando la funzione CONCAT in questo modo:

SELECT CONCAT('https://www.example.com/user/', username) AS profile_url 
FROM employees;

Come visto, otteniamo gli URL dei profili di tutti i dipendenti:

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

Gestione dei valori NULL

Nella tabella dipendenti, tutti i record hanno tutti i campi. Ma cosa succede se hai uno o più campi con valori NULL?

Facciamo un esempio per questo caso. Qui aggiorniamo il record corrispondente a ID = 2 per impostare la colonna della strada su 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

Ora usiamo CONCAT per selezionare l’indirizzo_completo:

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

Ecco l’output:

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

Si noti che il secondo elemento nel set di risultati è NULL.

Ma ci sarebbe piaciuto che l’output fosse la concatenazione delle colonne della città e dello stato per avere un’idea approssimativa dell’indirizzo. Quando si hanno valori NULL, è possibile utilizzare CONCAT_WS come alternativa alla funzione CONCAT. Vediamo come funziona.

Utilizzo di CONCAT_WS per gestire valori NULL durante la concatenazione

CONCAT_WS è un’alternativa a CONCAT che può essere utilizzata se si sospetta che uno o più campi contengano valori NULL.

Puoi utilizzare la funzione CONCAT_WS in questo modo:

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

Ora esegui la seguente query SELECT:

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

Otterrai il seguente output:

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

Come visto, per il secondo elemento nel set di risultati, otteniamo ‘Boston MA’ poiché il campo della strada è NULL.

⚠ Quando si utilizza CONCAT_WS, è necessario specificare il separatore. Se non si specifica il separatore, il risultato sarà NULL se una o più colonne sono NULL (simile a CONCAT).

Avvolgendo

Rivediamo ciò che abbiamo imparato:

  • Quando si esegue una query su una tabella di database per recuperare dati, è possibile concatenare più colonne di stringhe per ottenere risultati della query più utili e facili da interpretare. A tale scopo è possibile utilizzare la funzione CONCAT in SQL con la sintassi CONCAT(string_1, string_2, …, string_n).
  • È possibile concatenare stringhe letterali, colonne o una combinazione di entrambi. Tuttavia, se sono presenti uno o più valori NULL, il risultato per quel particolare record sarà NULL. Per gestire ciò, è possibile utilizzare CONCAT_WS con la sintassi CONCAT_WS(separatore, stringa_1, stringa_2, …, stringa_n).
  • CONCAT_WS gestisce i valori NULL in modo più elegante concatenando solo le stringhe presenti utilizzando il separatore specificato.

Per una rapida revisione dei comandi SQL e del loro utilizzo, è possibile aggiungere ai segnalibri questo Cheat Sheet SQL.