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.