sql >> Database teknologi >  >> RDS >> Database

Sådan opretter du en tabel fra en anden tabel i SQL

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.


  1. Hvordan overfører man værdier til IN-operatøren dynamisk?

  2. Eksekverer sæt SQL-forespørgsler ved hjælp af batch-fil?

  3. Simpel rekursiv forespørgsel i Oracle

  4. PostgreSQL Index vs InnoDB Index - Forstå forskellene