Copiare dati da una tabella a un'altra con SQL

Nel caso in cui si presenti la necessità di dover suddividere una tabelle di un database MySQl in più tabelle

Pubblicato da ,
Ultima modifica

Durante la realizzazione di un progetto basato su un database MySQL, può verificarsi l'esigenza di dover suddividere una determinata tabella in più tabelle, questa operazione può essere fatta direttamente dal pannello di controllo phpMyAdmin.

Supponiamo ad esempio di avere una tabella (alunni) degli alunni di una scuola di lingue, e ognuno di essi è iscritto ad almeno un corso di lingue in Inglese, Francese e Tedesco, le intestazioni della tabella sono le seguenti:

tabella alunni

idnameemailenfrde

en, fr e de sono i campi dei corsi di lingue, ogni lingua corrisponde ad un numero univoco ad esempio en => 1, fr => 2, de => 3, quindi se un alunno Mark sta seguendo in corso di lingua inglese in corrispondenza del campo en ci sarà il numero 1 altrimenti il campo avrà valore nullo e così via:

idnameemailenfrde
1Mark@email1NULLNULL

Adesso vogliamo creare un'altra tabella dei corsi frequentati (corsi) con i seguenti campi:

ididstlang

idst e lang sono rispettivamente l'id dello studente e l'id della lingua a cui lo studente partecipa, in modo da ottenere una tabella così:

tabella corsi

ididstlang
111
232

se la tabella degli alunni è composta da poche righe ovviamente questo è un lavoro che si può fare senza alcun sforzo, il problema invece è se tale tabella è composta da centinaia di righe.

In questo caso ci viene in aiuto SQL il linguaggio per database basati sul modello relazionale (RDBMS),

Codice SQL

 /* inserisco alunni che partecipano al corso di inglese */
INSERT INTO corsi (corsi.idst,corsi.lang)
SELECT alunni.id, alunni.en
FROM  alunni  WHERE en IS NOT NULL 


/* inserisco alunni che partecipano al corso di francese */
INSERT INTO corsi (corsi.idst,corsi.lang)
SELECT alunni.id, alunni.fr
FROM  alunni  WHERE fr IS NOT NULL 


/* inserisco alunni che partecipano al corso di tedesco */
INSERT INTO corsi (corsi.idst,corsi.lang)
SELECT alunni.id, alunni.de
FROM  alunni  WHERE de IS NOT NULL 

eseguendo separatamente queste query dal pannello di phpMyAdmin otterremo così una tabella corsi popolata con i dati che volevamo, nello specifico si tratta di una query di INSERT sulla tabella corsi, i cui dati vengono ottenuti con una determinata query di SELECT sulla tabella alunni.