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
id | name | en | fr | de |
---|
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:
id | name | en | fr | de | |
---|---|---|---|---|---|
1 | Mark | 1 | NULL | NULL |
Adesso vogliamo creare un'altra tabella dei corsi frequentati (corsi) con i seguenti campi:
id | idst | lang |
---|
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
id | idst | lang |
---|---|---|
1 | 1 | 1 |
2 | 3 | 2 |
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.