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.