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.