L’istru­zio­ne SQL INSERT INTO SELECT si usa per tra­sfe­ri­re 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 Struc­tu­red Query Language consente di creare numerose tabelle all’interno di un database e di com­pi­lar­le con dati. In alcuni casi potresti voler tra­sfe­ri­re da una tabella all’altra tutti i dati, in altri invece desideri spostare solo una porzione di in­for­ma­zio­ni. Piuttosto che inserire tutte le voci ma­nual­men­te, puoi sem­pli­ce­men­te copiare i dati e inserirli nella posizione de­si­de­ra­ta. 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 so­vra­scrit­te, sempre ammesso che i tipi di dati della tabella originale e di quella nuova cor­ri­spon­da­no.

Server virtuali (VPS)
Affidati ai VPS e server di IONOS, il tuo partner digitale cer­ti­fi­ca­to ISO
  • 1 Gbps di larghezza di banda e traffico il­li­mi­ta­to
  • Di­spo­ni­bi­li­tà del 99,99% e cer­ti­fi­ca­zio­ne ISO
  • As­si­sten­za 24/7 e con­su­len­te personale

Sintassi e fun­zio­na­men­to

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 con­di­zio­ne 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 spe­ci­fi­chi le singole colonne e per se­le­zio­nar­le, usi il comando SQL SELECT. In entrambi i casi è im­por­tan­te che la tabella nuova_tabella esista già nel database. Inoltre, i nomi di tutte le colonne della vecchia e nuova tabella devono coin­ci­de­re. Le colonne che non con­ten­go­no alcun valore pre­sen­ta­no 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 in­for­ma­zio­ni ri­guar­dan­ti 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 in­ti­to­la­ta “Lista_clienti_2024”, al momento ancora vuota.

Se vogliamo spostare tutte le voci della tabella “Lista_clienti_2023” nella nuova tabella “Lista_clienti_2024”, pro­ce­dia­mo 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 de­si­de­ri­no copiare solo de­ter­mi­na­te colonne della tabella. Ad esempio, nel nostro caso il numero di articoli ordinati non è rilevante per la nuova tabella. Quindi se­le­zio­nia­mo 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 con­di­zio­ni per lo spo­sta­men­to

Per copiare solo de­ter­mi­na­te righe è possibile usare la con­di­zio­ne WHERE. Nel caso della nostra tabella, ad esempio, vogliamo tra­sfe­ri­re 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

Al­ter­na­ti­va a SQL INSERT INTO SELECT

Un’al­ter­na­ti­va a SQL INSERT INTO SELECT è SELECT INTO. Entrambe le istru­zio­ni si usano per tra­sfe­ri­re 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 tra­sfe­ri­re 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. Pre­sta­zio­ni ec­cel­len­ti, fun­zio­na­li­tà di sicurezza e con­su­len­za per­so­na­liz­za­ta sono garantite in ogni caso.

Vai al menu prin­ci­pa­le