Torna all'elenco degli articoli Articoli
Tempo di lettura: 8 minuti

Come concatenare due colonne in SQL - Guida dettagliata

In SQL, la concatenazione è l'operazione di unione di stringhe, o parti di informazioni testuali. Scoprite come concatenare due colonne in SQL con questa guida dettagliata.

La concatenazione in SQL è il processo di combinazione di due o più stringhe di caratteri, colonne o espressioni in un'unica stringa. Ad esempio, la concatenazione di 'Kate', ' ' e 'Smith' dà come risultato 'Kate Smith'.

La concatenazione SQL può essere utilizzata in diverse situazioni in cui è necessario combinare più stringhe in un'unica stringa. Alcuni casi d'uso comuni sono:

  • Creare nomi completi o altre stringhe composite da più colonne di una tabella, ad esempio concatenando il nome e il cognome di un utente per creare un nome completo.
  • Creare etichette o titoli personalizzati concatenando più valori di stringa.
  • Creare un identificatore unico concatenando più colonne, ad esempio un ID cliente e un numero d'ordine.
  • Creare indirizzi e-mail concatenando un nome utente (katesmith) e un nome di dominio (learnSQL.com).

Questi sono solo alcuni esempi, ma la concatenazione SQL può essere utilizzata in molte altre situazioni in cui è necessario combinare più stringhe.

Il modo migliore per esercitarsi con l'SQL, compresa la concatenazione SQL, è il nostro programma interattivo SQL Practice Set. Contiene quasi 90 esercizi pratici, suddivisi in cinque sezioni tematiche. Il corso è un ottimo modo per rinfrescare le proprie conoscenze di SQL. Con la risoluzione di ogni esercizio, si acquisisce fiducia nelle proprie capacità.

Come concatenare due colonne in SQL

La sintassi della concatenazione in SQL può variare a seconda del dialetto SQL utilizzato. Ecco alcuni esempi delle tecniche più note di concatenazione in SQL.

L'operatore ||

L'SQL standard utilizza l'operatore || (oltre ad altre opzioni). La maggior parte dei database SQL, con la notevole eccezione di SQL Server, supporta questo operatore. L'operatore || accetta due o più argomenti e restituisce una singola stringa concatenata.

Utilizzo

Immaginiamo il seguente caso. Abbiamo una tabella chiamata utenti che memorizza le informazioni sugli utenti:

id	first_name	middle_name	last_name	age	marital_status
--------------------------------------------------------------
1	Derek		Brent		Zoolander	35	S
2	Marty		George	McFly		20	S

Utilizziamo l'operatore || per concatenare il nome e il cognome degli utenti e ottenere il nome completo:

SELECT first_name || ' ' || last_name AS full_name 
FROM users;

Il risultato:

full_name
---------------
Derek Zoolander
Marty McFly

In questo esempio, l'operatore || prende le colonne first_name e last_name dalla tabella e le concatena insieme. users e le concatena insieme con uno spazio in mezzo, ottenendo un nome completo per ogni utente. Il risultato viene quindi aliasato come full_name e restituito nei risultati della query.

È possibile concatenare più stringhe con l'operatore || fornendo più di due argomenti. Ad esempio, la seguente istruzione SQL concatena il nome, il secondo e il cognome degli utenti:

SELECT first_name || ' ' || middle_name || ' ' || last_name AS full_name 
FROM users;

Il risultato:

full_name
---------------
Derek Brent Zoolander
Marty George McFly

L'operatore di concatenazione || funziona anche con le colonne non di testo

I due esempi precedenti contengono solo stringhe; e gli altri tipi di dati? Gli argomenti dell'operatore || possono essere stringhe, colonne di testo, espressioni e altri tipi di dati come numeri o date. Verranno automaticamente convertiti in stringhe.

Ecco un esempio di come utilizzare l'operatore || per concatenare il nome, il cognome e l'età di un utente in una nuova stringa:

SELECT 
  first_name || ' ' || last_name || ': ' || age || ' yo' AS user_details 
FROM users;

Il risultato:

user_details
---------------
Derek Zoolander: 35 yo
Marty McFly: 20 yo

Si noti che il primo argomento della concatenazione deve essere di tipo testo. In caso contrario, è necessario eseguire il cast in un tipo di testo. Ecco un esempio di come utilizzare l'operatore || per concatenare l'ID e il nome di un utente per formare un identificatore unico:

SELECT 
  cast(id as VARCHAR) || '_' || first_name AS unique_id 
FROM users;

Il risultato:

unique_id
---------------
1_Derek
2_Marty

Attenzione ai NULL!

L'operatore di concatenazione | | restituisce NULL per qualsiasi argomento NULL.

Immaginate di avere dei valori vuoti o NULL nel vostro database:

id	first_name	middle_name	last_name	age	marital_status
--------------------------------------------------------
3	Terminator			T-1000	1	S
4	Robocop					2	S

Se uno degli argomenti della concatenazione è NULL, l'intera espressione restituisce NULL. Nell'esempio seguente, proveremo una concatenazione con un argomento NULL:

SELECT 
  first_name || ' ' || last_name AS full_name 
FROM users;

Il risultato:

full_name
---------------
Terminator T-1000
NULL

Il secondo risultato è NULL: Robocop ha un nome, ma il suo secondo e il suo cognome sono NULL. Se si concatena 'Robocop' con NULL, si ottiene NULL.

Nota: nel caso di Oracle, una stringa NULL è una stringa vuota. La concatenazione "ignora" la stringa NULL e gli argomenti concatenati vengono restituiti. Oracle restituirà quanto segue:

full_name
---------------
Terminator T-1000
Robocop

Utilizzare la funzione COALESCE() per concatenare i valori NULL

Un incredibile suggerimento per evitare i valori NULL è l'utilizzo della funzione COALESCE(). La funzione COALESCE() in SQL è una funzione integrata che restituisce il primo valore non NULL in un elenco di espressioni. La funzione accetta uno o più argomenti e restituisce il primo argomento che non è NULL.

Nell'esempio seguente, supponiamo che il campo last_name possa essere NULL. Per evitare una concatenazione errata, utilizziamo la funzione COALESCE():

SELECT 
  first_name || ' ' || COALESCE(last_name, '') AS full_name 
FROM users;

Il risultato:

full_name
---------------
Terminator T-1000
Robocop

Sopra, COALESCE() restituisce il cognome se il cognome non è NULL. Se il cognome è NULL, restituisce la stringa vuota ‘’. Questo ci permette di evitare di concatenare il valore NULL del cognome di Robocop e di ottenere un risultato NULL.

L'operatore +

L'operatore + viene utilizzato per concatenare le stringhe in MS SQL Server. Accetta due o più argomenti e restituisce una singola stringa concatenata.

Ecco un esempio di utilizzo dell'operatore + per concatenare il nome e il cognome di un utente:

SELECT 
  first_name + ' ' + last_name AS full_name 
FROM users;

Il risultato:

full_name
---------------
Derek Zoolander
Marty McFly

Con l'operatore +, nessuno degli argomenti viene convertito automaticamente. Ogni argomento dell'espressione deve essere del tipo VARCHAR se si vuole che la concatenazione abbia successo. Per concatenare valori di tipo diverso, si utilizza la funzione CAST():

SELECT 
  first_name + ' ' + last_name + ': ' + CAST(age AS VARCHAR) + ' yo' AS user_details 
FROM users;

Il risultato:

user_details
---------------
Derek Zoolander: 35 yo
Marty McFly: 20 yo

Senza la funzione CAST(), SQL Server lancia il seguente errore:

MS SQL
Token error: 'Error converting data type varchar to bigint.' 

La funzione CONCAT

CONCAT() è un'altra funzione standard di SQL che concatena due o più valori. Tutti i sistemi di database più diffusi, tranne SQLite, accettano questa funzione; SQLite accetta solo l'operatore ||.

Le principali differenze tra gli operatori || e + e la funzione CONCAT() sono:

  • CONCAT() gli argomenti vengono automaticamente convertiti in stringhe, per cui è possibile utilizzare argomenti di tipi di dati diversi.
  • CONCAT() tratta i valori NULL come stringhe vuote e li ignora. L'eccezione è rappresentata da MySQL (e, in misura minore, da MariaDB). In MySQL, la funzione CONCAT() è equivalente all'operatore ||; gli argomenti NULL danno come risultato NULL.

Ecco un esempio di utilizzo di CONCAT() per concatenare i nomi e i cognomi degli utenti:

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

Il risultato:

full_name
---------------
Derek Zoolander
Marty McFly
Terminator T-1000
Robocop

Nell'esempio seguente, useremo CONCAT() per concatenare l'ID e il nome degli utenti per formare un identificatore unico. Si noti che la funzione CAST() non è necessaria:

SELECT 
  CONCAT(id, '_', first_name) AS unique_id 
FROM users;

Il risultato:

unique_id
---------------
1_Derek
2_Marty
3_Terminator
4_Robocop

La funzione CONCAT_WS

La funzione CONCAT_WS in SQL è simile alla funzione CONCAT, ma viene utilizzata per concatenare due o più stringhe insieme a un separatore. La funzione accetta due argomenti: il primo è il separatore e gli altri sono le stringhe da concatenare.

Tutti i database più diffusi, tranne Oracle e SQLite, accettano la funzione CONCAT_WS. Questa funzione ignora NULLs negli argomenti (oltre al separatore), anche per MySQL.

Utilizziamo la funzione CONCAT_WS per concatenare i valori first_name e last_name con un separatore di spazi:

SELECT 
  CONCAT_WS(' ', first_name, last_name) AS full_name 
FROM users;

Il risultato:

full_name
---------------
Derek Zoolander
Marty McFly
Terminator T-1000
Robocop

Infine, proviamo a concatenare tre argomenti, separati da spazi:

SELECT 
  CONCAT_WS(' ', first_name, middle_name, last_name) AS full_name 
FROM users;

Il risultato:

full_name
---------------
Derek Brent Zoolander
Marty George McFly
Terminator T-1000
Robocop

Se volete saperne di più sulle funzioni SQL, vi consiglio di leggere l'articolo 5 funzioni SQL per la manipolazione delle stringhe di Marek Pankowski.

Concatenare due colonne in SQL è facile!

Spero che la lettura di questo articolo sia stata piacevole quanto lo è stata la mia stesura! Le differenze tra i dialetti di SQL sono sottili ed è sempre interessante saperne di più.

Questo articolo vi ha incoraggiato a saperne di più su SQL? Non esitate! Il vostro viaggio nell'SQL è già iniziato bene, e LearnSQL.it contiene tutte le risorse e l'aiuto necessari per diventare un esperto di SQL.

La padronanza di SQL è un'esperienza pratica: imparare i concetti è una cosa, ma scrivere buone query richiede pratica. Raccomando sinceramente il nostro Pratica su SQL che mette alla prova le vostre conoscenze di base di SQL e vi mostra dove dovete migliorare.

Quindi, cosa state aspettando? Non limitatevi a concatenare colonne: imparate oggi stesso l'SQL!