Problem:
Du vil gerne oprette en ny tabel med data kopieret fra en anden tabel.
Eksempel:
Vores database har en tabel med navnet product
med data i følgende kolonner:id
(primær nøgle), name
, category
og price
.
id | navn | kategori | pris |
---|---|---|---|
105 | rosede | blomst | 5,70 |
108 | skrivebord | møbler | 120,00 |
115 | tulipan | blomst | 6,50 |
123 | solsikke | blomst | 7,50 |
145 | guitar | musik | 300,00 |
155 | orkide | blomst | 9,50 |
158 | fløjte | musik | 156,00 |
Lad os i databasen oprette en ny tabel med navnet florist
som vil gemme følgende kolonner:id
, name
og price
. Disse kolonner kommer fra tabellen product
men kun fra kategorien blomst .
Det er vigtigt at bemærke, at vi er ved at oprette en ny tabel. Tabellen florist
findes ikke i denne database.
OPRET TABEL SOM SELECT-struktur
For at oprette en ny tabel fra en anden tabel, kan du bruge CREATE TABLE AS SELECT
. Denne konstruktion er standard SQL. Se på SQL-koden nedenfor:
Løsning 1:
CREATE TABLE florist AS SELECT * FROM product WHERE category = ’flower’;
Her er resultatet af forespørgslen:
id | navn | kategori | pris |
---|---|---|---|
105 | rosede | blomst | 5,70 |
115 | tulipan | blomst | 6,50 |
123 | solsikke | blomst | 7,50 |
155 | orkide | blomst | 9,50 |
Brug CREATE TABLE
, kan du oprette en ny tabel ved at kopiere data fra en anden tabel. I dette tilfælde bruger vi først CREATE TABLE
klausul med navnet på ny tabel (i vores eksempel:florist
), skriver vi derefter AS
og SELECT
forespørgsel med navnene på kolonnerne (i vores eksempel:*
), og vi skriver så FROM
efterfulgt af navnet på tabellen, hvorfra dataene er indsamlet (i vores eksempel:product
). Derefter kan du bruge en hvilken som helst SQL-sætning:WHERE
, GROUP BY
, HAVING
osv.
Det nye bord florist
vil indeholde definitionen af kolonnerne fra product
tabel (id
, name
, category
og price
). Antallet af rækker er begrænset ved at bruge en WHERE-klausul, der filtrerer posterne til kun at hente data fra kategorien blomst .
SELECT INTO-strukturen
En anden løsning er at bruge SELECT INTO
. Denne syntaks er ikke-standard SQL, men den understøttes af mange populære databaser.
Løsning 2:
SELECT id, name, price INTO florist FROM product WHERE category=’flower’;
Her er resultatet:
id | navn | pris |
---|---|---|
105 | rosede | 5,70 |
115 | tulipan | 6,50 |
123 | solsikke | 7,50 |
155 | orkide | 9,50 |
Diskussion:
Hvis du gerne vil oprette en ny tabel baseret på strukturen og data fra en anden tabel, kan du bruge SELECT INTO
klausul. Skriv først en SELECT
klausul efterfulgt af en liste over kolonner (i vores eksempel:id
, name
og price
) fra den eksisterende tabel (i vores eksempel:product
).
Bemærk, at der er flere kolonner i tabellen product
. Vi valgte kun de kolonner, vi er interesserede i.
Brug derefter søgeordet INTO
med navnet på den nye tabel, du vil oprette (i vores eksempel:florist
). Skriv derefter søgeordet FROM med navnet på den eksisterende tabel (i vores eksempel:product
).
Hvis du vil vælge filtrerede rækker fra tabellen, skal du bruge WHERE
klausul. Efter WHERE
, skriv betingelserne for at filtrere dataene (i vores eksempel:WHERE category=’flower’
).
I dette eksempel opretter vi en ny tabel florist
som har færre kolonner end tabellen product
(forskellen er kolonnekategorien). Denne nye tabel har også færre rækker – kun rækkerne med kategorien blomst .
Hvis du vil oprette en tabel ved hjælp af alle kolonnerne i den anden tabel, kan du selvfølgelig bruge *
i stedet for at angive kolonnerne efter SELECT
. Se eksemplet nedenfor:
Løsning 2:
SELECT * INTO florist FROM product WHERE category=’flower’;
Her er resultatet:
id | navn | kategori | pris |
---|---|---|---|
105 | rosede | blomst | 5,70 |
115 | tulipan | blomst | 6,50 |
123 | solsikke | blomst | 7,50 |
155 | orkide | blomst | 9,50 |
Brug SELECT INTO
er en nem måde at oprette en ny tabel baseret på en eksisterende tabel i databasen.