Problema:
Vorresti creare una nuova tabella in un database con dati definiti da una query SQL.
Esempio:
Vorremmo creare la tabella gamer
basato su una query SQL. In questa query, selezioniamo i dati da un'altra tabella denominata championship
presentato di seguito.
id | giocatore | punteggio | data_campionato |
---|---|---|---|
1 | alice | 14 | 10-08-2020 |
2 | supervisore | 10 | 28-09-2020 |
3 | uomo felice | 0 | 10-08-2020 |
4 | luka | 6 | 10-08-2020 |
5 | oli | 12 | 10-08-2020 |
6 | grande giocatore | 7 | 12-09-2020 |
Nel database, creiamo una nuova tabella denominata gamer
che memorizzerà i dati in tutte le colonne definite nella tabella championship
(id
, gamer
, score
e championship_date
).
Soluzione 1:
CREATE TABLE gamer AS SELECT * FROM championship;
Discussione:
Se desideri creare una nuova tabella, il primo passo è utilizzare il CREATE TABLE
clausola e il nome della nuova tabella (nel nostro esempio:gamer
). Quindi, usa il AS
parola chiave e fornire un SELECT
istruzione che seleziona i dati per la nuova tabella. Nel nostro esempio, abbiamo selezionato tutte le colonne dalla tabella championship
utilizzando l'asterisco (*). Il set di risultati mostra tutti i record nella tabella championship
.
Tuttavia, se desideri creare una tabella con solo un sottoinsieme dei record, puoi specificare la query selezionata come nell'esempio seguente.
Soluzione 2:
CREATE TABLE gamer AS SELECT gamer, score, championship_date FROM championship WHERE championship_date <= 2020-08-10;
Ecco il set di risultati:
giocatore | punteggio | data_campionato |
---|---|---|
alice | 14 | 10-08-2020 |
uomo felice | 0 | 10-08-2020 |
lukas | 6 | 10-08-2020 |
oli | 12 | 10-08-2020 |
Il SELECT
query recupera solo i record con un championship_date
data uguale o precedente a 2020-08-10 (WHERE championship_date <= 2020-08-10
). La nuova tabella memorizza meno colonne rispetto all'esempio precedente (SELECT gamer, score, championship_date
) senza la colonna id
.
Una soluzione simile a questo problema consiste nell'usare SELECT INTO
clausola per creare una nuova tabella e copiare i dati da un'altra tabella. Dai un'occhiata al codice:
Soluzione 3:
SELECT gamer, score, championship_date INTO gamer FROM championship WHERE championship_date <= 2020-08-10;
La tabella risultante è la stessa. Si noti che questa costruzione non è presente nello standard SQL. In questo comando SQL, scriviamo prima SELECT
, quindi l'elenco delle colonne, quindi la parola chiave INTO
, e infine il nome della nuova tabella che vogliamo creare. Successivamente, puoi aggiungere WHERE
e altre clausole SQL come GROUP BY
o HAVING
per filtrare i record per la nuova tabella.