Probleem:
U wilt een nieuwe tabel maken in een database met gegevens gedefinieerd door een SQL-query.
Voorbeeld:
We willen graag de tafel gamer
op basis van een SQL-query. In deze zoekopdracht selecteren we gegevens uit een andere tabel met de naam championship
hieronder weergegeven.
id | gamer | score | championship_date |
---|---|---|---|
1 | alice | 14 | 2020-08-10 |
2 | supervisor | 10 | 28-09-2020 |
3 | happyman | 0 | 2020-08-10 |
4 | lukas | 6 | 2020-08-10 |
5 | oli | 12 | 2020-08-10 |
6 | biggamer | 7 | 2020-09-12 |
Laten we in de database een nieuwe tafel maken met de naam gamer
die gegevens zal opslaan in alle kolommen die zijn gedefinieerd in de tabel championship
(id
, gamer
, score
, en championship_date
).
Oplossing 1:
CREATE TABLE gamer AS SELECT * FROM championship;
Discussie:
Als u een nieuwe tabel wilt maken, is de eerste stap het gebruik van de CREATE TABLE
clausule en de naam van de nieuwe tafel (in ons voorbeeld:gamer
). Gebruik dan de AS
zoekwoord en geef een SELECT
instructie die gegevens selecteert voor de nieuwe tabel. In ons voorbeeld hebben we alle kolommen uit de tabel championship
door het sterretje (*) te gebruiken. De resultatenset toont alle records in de tabel championship
.
Als u echter een tabel wilt maken met slechts een subset van de records, kunt u de geselecteerde query specificeren zoals in het onderstaande voorbeeld.
Oplossing 2:
CREATE TABLE gamer AS SELECT gamer, score, championship_date FROM championship WHERE championship_date <= 2020-08-10;
Hier is de resultatenset:
gamer | score | championship_date |
---|---|---|
alice | 14 | 2020-08-10 |
happyman | 0 | 2020-08-10 |
lukas | 6 | 2020-08-10 |
oli | 12 | 2020-08-10 |
De SELECT
query haalt alleen de records op met een championship_date
datum gelijk aan of ouder dan 2020-08-10 (WHERE championship_date <= 2020-08-10
). De nieuwe tabel slaat minder kolommen op dan in het vorige voorbeeld (SELECT gamer, score, championship_date
) zonder de kolom id
.
Een vergelijkbare oplossing voor dit probleem is het gebruik van de SELECT INTO
om een nieuwe tabel te maken en gegevens uit een andere tabel te kopiëren. Bekijk de code:
Oplossing 3:
SELECT gamer, score, championship_date INTO gamer FROM championship WHERE championship_date <= 2020-08-10;
De resulterende tabel is hetzelfde. Merk op dat deze constructie niet aanwezig is in de SQL-standaard. In dit SQL-commando schrijven we eerst SELECT
, dan de lijst met kolommen, vervolgens het trefwoord INTO
, en tot slot de naam van de nieuwe tabel die we willen maken. Vervolgens kunt u WHERE
. toevoegen en andere SQL-clausules zoals GROUP BY
of HAVING
om records voor de nieuwe tabel te filteren.