Problem:
Du vill skapa en ny tabell i en databas med data definierade av en SQL-fråga.
Exempel:
Vi skulle vilja skapa tabellen gamer
baserat på en SQL-fråga. I den här frågan väljer vi data från en annan tabell som heter championship
presenteras nedan.
id | spelare | poäng | championship_date |
---|---|---|---|
1 | alice | 14 | 2020-08-10 |
2 | handledare | 10 | 2020-09-28 |
3 | happyman | 0 | 2020-08-10 |
4 | lukas | 6 | 2020-08-10 |
5 | oli | 12 | 2020-08-10 |
6 | biggamer | 7 | 2020-09-12 |
Låt oss skapa en ny tabell med namnet gamer
som kommer att lagra data i alla kolumner som definieras i tabellen championship
(id
, gamer
, score
och championship_date
).
Lösning 1:
CREATE TABLE gamer AS SELECT * FROM championship;
Diskussion:
Om du vill skapa en ny tabell är det första steget att använda CREATE TABLE
sats och namnet på den nya tabellen (i vårt exempel:gamer
). Använd sedan AS
nyckelord och ange en SELECT
uttalande som väljer data för den nya tabellen. I vårt exempel valde vi alla kolumner från tabellen championship
genom att använda asterisken (*). Resultatuppsättningen visar alla rekord i tabellen championship
.
Men om du vill skapa en tabell med endast en delmängd av posterna kan du ange den valda frågan som i exemplet nedan.
Lösning 2:
CREATE TABLE gamer AS SELECT gamer, score, championship_date FROM championship WHERE championship_date <= 2020-08-10;
Här är resultatuppsättningen:
spelare | poäng | championship_date |
---|---|---|
alice | 14 | 2020-08-10 |
happyman | 0 | 2020-08-10 |
lukas | 6 | 2020-08-10 |
oli | 12 | 2020-08-10 |
SELECT
query hämtar endast poster med en championship_date
datum lika med eller äldre än 2020-08-10 (WHERE championship_date <= 2020-08-10
). Den nya tabellen lagrar färre kolumner än i föregående exempel (SELECT gamer, score, championship_date
) utan kolumnen id
.
En liknande lösning på detta problem är att använda SELECT INTO
för att skapa en ny tabell och kopiera data från en annan tabell. Ta en titt på koden:
Lösning 3:
SELECT gamer, score, championship_date INTO gamer FROM championship WHERE championship_date <= 2020-08-10;
Den resulterande tabellen är densamma. Observera att denna konstruktion inte finns i SQL-standarden. I det här SQL-kommandot skriver vi först SELECT
, sedan listan med kolumner, bredvid nyckelordet INTO
, och slutligen namnet på den nya tabell vi vill skapa. Därefter kan du lägga till WHERE
och andra SQL-satser som GROUP BY
eller HAVING
för att filtrera poster för den nya tabellen.