Corsi on-line

SELECT in INSERT MySQL

Le istruzioni chiamate INSERT INTO SELECT permettono di copiare dei dati presenti in una tabella e di inserirli in un’altra utilizzando un unico statement; la sintassi necessaria prevede sostanzialmente due casistiche: quella in cui tutte le colonne copiate da una tabella vengono riprodotte in una seconda e, non meno importante, quella in cui vengono copiate soltanto le colonne desiderate, procedura che richiederà di specificare queste ultime rendendo impossibile l’utilizzo della wildcard “*”.

MySQLSi immagini quindi di disporre delle seguenti tabelle:

  1. nominativi: oltre ad un identificatore autoincrementale essa dovrà prevedere almeno i campi “nome”, per il nome completo, “residenza”, per la località associata al nominativo registrato, e “nazione”, il nome dello stato della località di riferimento.
  2. clienti: i campi disponibili dovranno essere sostanzialmente gli stessi, ciò però non toglie che possano essere presenti in tabella anche ulteriori campi, considerazione che vale anche per “nominativi”. L’unica differenza riguarderà il campo per il nome completo che, questa volta, si chiamerà “nome_cliente”.

Detto questo, si potranno utilizzare le INSERT INTO SELECT per ottenere diversi risultati; la prima istruzione proposto consentirà per esempio di copiare soltanto le colonne “nome_cliente” e “nazione” della tabella “cliente” nei campi “nome” e “nazione” della tabella “nominativi”:

INSERT INTO nominativi (nome, nazione)
SELECT nome_cliente, nazione FROM clienti;

Il secondo esempio prevede un’istruzione più articolata, verrà infatti utilizzata la clausola WHERE con lo scopo di prelevare dalla tabella “clienti” soltanto i dati relativi alle colonne “nome_cliente” e “nazione” della tabella “clienti” in cui i record presentano “UK” come valore del campo “nazione”

INSERT INTO nominativi (nome, nazione)
SELECT nome_cliente, nazione FROM clienti
WHERE Nazione='UK';

Come descritto per il caso di WHERE, all’interno di una INSERT INTO SELECT sarà possibile utilizzare agevolmente anche altre due clausole come HAVING e GROUP BY, inoltre, questi statements potranno essere impiegati non soltanto per copiare dati nella loro forma originale, ma anche i risultati della loro elaborazione. A tal proposito si analizzi un’istruzione come la seguente:

INSERT INTO informazioni_ordini (nome_negozio, ordini, data_ordine)
SELECT nome_negozio, SUM(ordini), data_ordine
FROM dati_ordini
GROUP BY nome_negozio, data_ordine;

In pratica, il valore del dato inserito nel campo “ordini” della tabella “informazioni_ordini” sarà uguale alla somma (funzione SUM()) dei valori presenti nel campo “ordini” della tabella “data_ordini” raggruppati per i valori dei campi “nome_negozio” e “data_ordine”.

Post correlati
I più letti del mese
Tematiche