Problem:
Du vill skapa en ny tabell med data kopierad från en annan tabell.
Exempel:
Vår databas har en tabell som heter product
med data i följande kolumner:id
(primär nyckel), name
, category
och price
.
id | namn | kategori | pris |
---|---|---|---|
105 | ros | blomma | 5,70 |
108 | skrivbord | möbler | 120,00 |
115 | tulpan | blomma | 6,50 |
123 | solros | blomma | 7,50 |
145 | gitarr | musik | 300,00 |
155 | orkidé | blomma | 9,50 |
158 | flöjt | musik | 156,00 |
Låt oss skapa en ny tabell med namnet florist
som kommer att lagra följande kolumner:id
, name
och price
. Dessa kolumner kommer från tabellen product
men bara från kategorin blomma .
Det är viktigt att notera att vi skapar en ny tabell. Tabellen florist
finns inte i den här databasen.
SKAPA TABELL SOM SELECT-struktur
För att skapa en ny tabell från en annan tabell kan du använda CREATE TABLE AS SELECT
. Denna konstruktion är standard SQL. Titta på SQL-koden nedan:
Lösning 1:
CREATE TABLE florist AS SELECT * FROM product WHERE category = ’flower’;
Här är resultatet av frågan:
id | namn | kategori | pris |
---|---|---|---|
105 | ros | blomma | 5,70 |
115 | tulpan | blomma | 6,50 |
123 | solros | blomma | 7,50 |
155 | orkidé | blomma | 9,50 |
Använd CREATE TABLE
, kan du skapa en ny tabell genom att kopiera data från en annan tabell. I det här fallet använder vi först CREATE TABLE
klausul med namnet för ny tabell (i vårt exempel:florist
), skriver vi sedan AS
och SELECT
fråga med namnen på kolumnerna (i vårt exempel:*
), och vi skriver sedan FROM
följt av namnet på tabellen från vilken data samlas in (i vårt exempel:product
). Sedan kan du använda vilken SQL-sats som helst:WHERE
, GROUP BY
, HAVING
, etc.
Det nya bordet florist
kommer att innehålla definitionen av kolumnerna från product
tabell (id
, name
, category
och price
). Antalet rader begränsas genom att använda en WHERE-sats som filtrerar posterna för att endast hämta data från kategorin blomma .
SELECT INTO-strukturen
En annan lösning är att använda SELECT INTO
. Denna syntax är icke-standard SQL, men den stöds av många populära databaser.
Lösning 2:
SELECT id, name, price INTO florist FROM product WHERE category=’flower’;
Här är resultatet:
id | namn | pris |
---|---|---|
105 | ros | 5,70 |
115 | tulpan | 6,50 |
123 | solros | 7,50 |
155 | orkidé | 9,50 |
Diskussion:
Om du vill skapa en ny tabell baserat på strukturen och data från en annan tabell kan du använda SELECT INTO
klausul. Skriv först en SELECT
sats följt av en lista med kolumner (i vårt exempel:id
, name
och price
) från den befintliga tabellen (i vårt exempel:product
).
Observera att det finns fler kolumner i tabellen product
. Vi har bara valt de kolumner vi är intresserade av.
Använd sedan nyckelordet INTO
med namnet på den nya tabell du vill skapa (i vårt exempel:florist
). Skriv sedan nyckelordet FROM med namnet på den befintliga tabellen (i vårt exempel:product
).
Om du vill välja filtrerade rader från tabellen, använd WHERE
klausul. Efter WHERE
, skriv villkoren för att filtrera data (i vårt exempel:WHERE category=’flower’
).
I det här exemplet skapar vi en ny tabell florist
som har färre kolumner än tabellen product
(skillnaden är kolumnkategorin). Den här nya tabellen har också färre rader – bara raderna med kategorin blomma .
Naturligtvis, om du vill skapa en tabell med alla kolumner i den andra tabellen, kan du använda *
istället för att lista kolumnerna efter SELECT
. Se exemplet nedan:
Lösning 2:
SELECT * INTO florist FROM product WHERE category=’flower’;
Här är resultatet:
id | namn | kategori | pris |
---|---|---|---|
105 | ros | blomma | 5,70 |
115 | tulpan | blomma | 6,50 |
123 | solros | blomma | 7,50 |
155 | orkidé | blomma | 9,50 |
Använd SELECT INTO
är ett enkelt sätt att skapa en ny tabell baserat på en befintlig tabell i databasen.