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.
- 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;
sqlIn 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;
sqlIn 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;
sqlOra, 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;
sqlIn 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';
sqlQuesta 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.
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.