Problema:
Vorresti creare una nuova tabella con i dati copiati da un'altra tabella.
Esempio:
Il nostro database ha una tabella denominata product
con i dati nelle seguenti colonne:id
(chiave primaria), name
, category
e price
.
id | nome | categoria | prezzo |
---|---|---|---|
105 | rosa | fiore | 5.70 |
108 | scrivania | mobili | 120.00 |
115 | tulipano | fiore | 6.50 |
123 | girasole | fiore | 7.50 |
145 | chitarra | musica | 300.00 |
155 | orchidea | fiore | 9:50 |
158 | flauto | musica | 156.00 |
Nel database, creiamo una nuova tabella denominata florist
che memorizzerà le seguenti colonne:id
, name
e price
. Queste colonne provengono dalla tabella product
ma solo dalla categoria fiore .
È importante notare che stiamo creando una nuova tabella. La tavola florist
non esiste in questo database.
La struttura CREATE TABLE AS SELECT
Per creare una nuova tabella da un'altra tabella, puoi usare CREATE TABLE AS SELECT
. Questa costruzione è SQL standard. Guarda il codice SQL qui sotto:
Soluzione 1:
CREATE TABLE florist AS SELECT * FROM product WHERE category = ’flower’;
Ecco il risultato della query:
id | nome | categoria | prezzo |
---|---|---|---|
105 | rosa | fiore | 5.70 |
115 | tulipano | fiore | 6.50 |
123 | girasole | fiore | 7.50 |
155 | orchidea | fiore | 9:50 |
Usando CREATE TABLE
, puoi creare una nuova tabella copiando i dati da un'altra tabella. In questo caso, utilizziamo prima il CREATE TABLE
clausola con il nome della nuova tavola (nel nostro esempio:florist
), scriviamo quindi AS
e il SELECT
interrogare con i nomi delle colonne (nel nostro esempio:*
), e quindi scriviamo FROM
seguito dal nome della tabella da cui sono raccolti i dati (nel nostro esempio:product
). Quindi, puoi utilizzare qualsiasi clausola SQL:WHERE
, GROUP BY
, HAVING
, ecc.
Il nuovo tavolo florist
conterrà la definizione delle colonne del product
tabella (id
, name
, category
e price
). Il numero di righe è limitato utilizzando una clausola WHERE, filtrando i record per recuperare solo i dati dalla categoria fiore .
La struttura SELECT INTO
Un'altra soluzione è usare SELECT INTO
. Questa sintassi non è SQL standard, ma è supportata da molti database popolari.
Soluzione 2:
SELECT id, name, price INTO florist FROM product WHERE category=’flower’;
Ecco il risultato:
id | nome | prezzo |
---|---|---|
105 | rosa | 5.70 |
115 | tulipano | 6.50 |
123 | girasole | 7.50 |
155 | orchidea | 9:50 |
Discussione:
Se desideri creare una nuova tabella in base alla struttura e ai dati di un'altra tabella, puoi utilizzare il SELECT INTO
clausola. Per prima cosa, scrivi un SELECT
clausola seguita da un elenco di colonne (nel nostro esempio:id
, name
e price
) dalla tabella esistente (nel nostro esempio:product
).
Nota che ci sono più colonne nella tabella product
. Abbiamo selezionato solo le colonne che ci interessano.
Quindi, usa la parola chiave INTO
con il nome del nuovo tavolo che vuoi creare (nel nostro esempio:florist
). Quindi, scrivi la parola chiave FROM con il nome della tabella esistente (nel nostro esempio:product
).
Se desideri selezionare le righe filtrate dalla tabella, utilizza WHERE
clausola. Dopo WHERE
, scrivi le condizioni per filtrare i dati (nel nostro esempio:WHERE category=’flower’
).
In questo esempio, stiamo creando un nuovo tavolo florist
che ha meno colonne della tabella product
(la differenza è la categoria della colonna). Questa nuova tabella ha anche meno righe, solo le righe con la categoria fiore .
Ovviamente, se vuoi creare una tabella usando tutte le colonne dell'altra tabella, puoi usare *
invece di elencare le colonne dopo SELECT
. Vedi l'esempio seguente:
Soluzione 2:
SELECT * INTO florist FROM product WHERE category=’flower’;
Ecco il risultato:
id | nome | categoria | prezzo |
---|---|---|---|
105 | rosa | fiore | 5.70 |
115 | tulipano | fiore | 6.50 |
123 | girasole | fiore | 7.50 |
155 | orchidea | fiore | 9:50 |
Usando SELECT INTO
è un modo semplice per creare una nuova tabella basata su una tabella esistente nel database.