Il comando SQL INSERT INTO SELECT: copiare i dati da una tabella all’altra

L’istruzione SQL INSERT INTO SELECT si usa per trasferire i dati da una tabella all’altra, a patto che sia già stata creata una nuova tabella. Le colonne vuote ottengono il valore NULL anche nella nuova tabella.

Cos’è SQL INSERT INTO SELECT?

Lo Structured Query Language consente di creare numerose tabelle all’interno di un database e di compilarle con dati. In alcuni casi potresti voler trasferire da una tabella all’altra tutti i dati, in altri invece desideri spostare solo una porzione di informazioni. Piuttosto che inserire tutte le voci manualmente, puoi semplicemente copiare i dati e inserirli nella posizione desiderata. Il comando più adatto a questo scopo è SQL INSERT INTO SELECT: consente di copiare i dati in base alle proprie esigenze e di inserirli nella nuova tabella. Nel fare questo le voci esistenti non vengono sovrascritte, sempre ammesso che i tipi di dati della tabella originale e di quella nuova corrispondano.

Server virtuali (VPS)
Virtualizzazione totale con accesso root completo
  • Traffico illimitato e fino a 1 Gbit/s di larghezza di banda
  • Storage SSD NVMe veloce
  • Plesk Web Host Edition incluso

Sintassi e funzionamento

La sintassi di SQL INSERT INTO SELECT cambia a seconda che vogliamo copiare tutte le colonne da una tabella all’altra oppure che vengano copiate solo alcune colonne. Per spostare tutti i dati da una tabella all’altra usiamo questo codice:

INSERT INTO nuova_tabella
SELECT * FROM vecchia_tabella
WHERE condizione;
sql

In questo caso la condizione WHERE è opzionale.

Se invece desideri spostare solo alcune colonne, la sintassi è questa:

INSERT INTO nuova_tabella (colonna1, colonna2, colonna3, …)
SELECT colonna1, colonna2, colonna3, … FROM vecchia_tabella
WHERE condizione;
sql

In questo caso specifichi le singole colonne e per selezionarle, usi il comando SQL SELECT. In entrambi i casi è importante che la tabella nuova_tabella esista già nel database. Inoltre, i nomi di tutte le colonne della vecchia e nuova tabella devono coincidere. Le colonne che non contengono alcun valore presentano il valore NULL.

Copiare e inserire una tabella intera

Per mostrarti come funziona SQL INSERT INTO SELECT nella pratica, creiamo la tabella “Lista_clienti_2023”. Questa contiene informazioni riguardanti il numero cliente, il cognome, la città e la quantità di articoli ordinati. La relativa sintassi si scrive così:

Numero cliente Cognome Città Articoli
1427 Rossi Roma 13
1377 Bianchi Milano 9
1212 Ferrari Milano 15
1431 Costa Firenze 22
1118 Russo Roma 10

In più abbiamo una nuova tabella intitolata “Lista_clienti_2024”, al momento ancora vuota.

Se vogliamo spostare tutte le voci della tabella “Lista_clienti_2023” nella nuova tabella “Lista_clienti_2024”, procediamo come segue:

INSERT INTO Lista_clienti_2024
SELECT * Lista_clienti_2023;
sql

Ora, tutte le voci della vecchia lista clienti si trovano anche nella nuova lista:

Numero cliente Cognome Città Articoli
1427 Rossi Roma 13
1377 Bianchi Milano 9
1212 Ferrari Milano 15
1431 Costa Firenze 22
1118 Russo Roma 10

Spostare solo alcune colonne

Tuttavia, può succedere che si desiderino copiare solo determinate colonne della tabella. Ad esempio, nel nostro caso il numero di articoli ordinati non è rilevante per la nuova tabella. Quindi selezioniamo solo le colonne che vogliamo copiare:

INSERT INTO Lista_clienti_2024 (Numero cliente, Cognome, Città)
SELECT Numero cliente, Cognome, Città FROM Lista_clienti_2023;
sql

In tal modo otteniamo questa nuova tabella:

Numero cliente Cognome Città Articoli
1427 Rossi Roma
1377 Bianchi Milano
1212 Ferrari Milano
1431 Costa Firenze
1118 Russo Roma

La colonna articoli contiene solo valori NULL.

Definire condizioni per lo spostamento

Per copiare solo determinate righe è possibile usare la condizione WHERE. Nel caso della nostra tabella, ad esempio, vogliamo trasferire solo i clienti di Milano. Il relativo codice è:

INSERT INTO Lista_clienti_2024
SELECT * FROM Lista_clienti_2023
WHERE Città = 'Milano';
sql

Questa la nuova tabella:

Numero cliente Cognome Città Articoli
1377 Bianchi Milano 9
1212 Ferrari Milano 15

Alternativa a SQL INSERT INTO SELECT

Un’alternativa a SQL INSERT INTO SELECT è SELECT INTO. Entrambe le istruzioni si usano per trasferire dati da una tabella a un’altra e sono parte di un comando più ampio. Tuttavia, mentre SQL INSERT INTO SELECT richiede una tabella esistente in cui trasferire i dati, SELECT INTO crea una nuova tabella.

Consiglio

A te la scelta: grazie all’hosting SQL server di IONOS puoi scegliere fra MSSQL, MySQL e MariaDB. Prestazioni eccellenti, funzionalità di sicurezza e consulenza personalizzata sono garantite in ogni caso.

Hai trovato questo articolo utile?
Per offrirti una migliore esperienza di navigazione online questo sito web usa dei cookie, propri e di terze parti. Continuando a navigare sul sito acconsenti all’utilizzo dei cookie. Scopri di più sull’uso dei cookie e sulla possibilità di modificarne le impostazioni o negare il consenso.
Page top