Problem:
Du vil gerne oprette en ny tabel i en database med data defineret af en SQL-forespørgsel.
Eksempel:
Vi vil gerne oprette tabellen gamer
baseret på en SQL-forespørgsel. I denne forespørgsel vælger vi data fra en anden tabel ved navn championship
præsenteret nedenfor.
id | gamer | score | championship_date |
---|---|---|---|
1 | alice | 14 | 2020-08-10 |
2 | supervisor | 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 |
Lad os i databasen oprette en ny tabel med navnet gamer
som vil gemme data i alle de kolonner, der er defineret i tabellen championship
(id
, gamer
, score
, og championship_date
).
Løsning 1:
CREATE TABLE gamer AS SELECT * FROM championship;
Diskussion:
Hvis du gerne vil oprette en ny tabel, er det første trin at bruge CREATE TABLE
klausul og navnet på den nye tabel (i vores eksempel:gamer
). Brug derefter AS
søgeord og angiv en SELECT
sætning, der vælger data til den nye tabel. I vores eksempel valgte vi alle kolonner fra tabellen championship
ved at bruge stjernen (*). Resultatsættet viser alle rekorderne i tabellen championship
.
Men hvis du vil oprette en tabel med kun en delmængde af posterne, kan du angive den valgte forespørgsel som i eksemplet nedenfor.
Løsning 2:
CREATE TABLE gamer AS SELECT gamer, score, championship_date FROM championship WHERE championship_date <= 2020-08-10;
Her er resultatsættet:
gamer | score | championship_date |
---|---|---|
alice | 14 | 2020-08-10 |
happyman | 0 | 2020-08-10 |
lukas | 6 | 2020-08-10 |
oli | 12 | 2020-08-10 |
SELECT
forespørgslen henter kun posterne med en championship_date
dato lig med eller ældre end 2020-08-10 (WHERE championship_date <= 2020-08-10
). Den nye tabel gemmer færre kolonner end i det forrige eksempel (SELECT gamer, score, championship_date
) uden kolonnen id
.
En lignende løsning på dette problem er at bruge SELECT INTO
klausul for at oprette en ny tabel og kopiere data fra en anden tabel. Tag et kig på koden:
Løsning 3:
SELECT gamer, score, championship_date INTO gamer FROM championship WHERE championship_date <= 2020-08-10;
Den resulterende tabel er den samme. Bemærk, at denne konstruktion ikke er til stede i SQL-standarden. I denne SQL-kommando skriver vi først SELECT
, derefter listen over kolonner, ved siden af søgeordet INTO
, og til sidst navnet på den nye tabel, vi vil oprette. Dernæst kan du tilføje WHERE
og andre SQL-sætninger såsom GROUP BY
eller HAVING
for at filtrere poster for den nye tabel.