Probleem:
U wilt een nieuwe tabel maken met gegevens die uit een andere tabel zijn gekopieerd.
Voorbeeld:
Onze database heeft een tabel met de naam product
met gegevens in de volgende kolommen:id
(primaire sleutel), name
, category
, en price
.
id | naam | categorie | prijs |
---|---|---|---|
105 | roos | bloem | 5,70 |
108 | bureau | meubels | 120,00 |
115 | tulp | bloem | 6.50 |
123 | zonnebloem | bloem | 7,50 |
145 | gitaar | muziek | 300,00 |
155 | orchidee | bloem | 9,50 |
158 | fluit | muziek | 156,00 |
Laten we in de database een nieuwe tabel maken met de naam florist
waarin de volgende kolommen worden opgeslagen:id
, name
, en price
. Deze kolommen komen uit de tabel product
maar alleen uit de categorie bloem .
Het is belangrijk op te merken dat we een nieuwe tabel maken. De tafel florist
bestaat niet in deze database.
De CREATE TABLE AS SELECT-structuur
Om een nieuwe tabel van een andere tabel te maken, kunt u CREATE TABLE AS SELECT
. gebruiken . Deze constructie is standaard SQL. Bekijk de onderstaande SQL-code:
Oplossing 1:
CREATE TABLE florist AS SELECT * FROM product WHERE category = ’flower’;
Hier is het resultaat van de zoekopdracht:
id | naam | categorie | prijs |
---|---|---|---|
105 | roos | bloem | 5,70 |
115 | tulp | bloem | 6.50 |
123 | zonnebloem | bloem | 7,50 |
155 | orchidee | bloem | 9,50 |
CREATE TABLE
gebruiken , kunt u een nieuwe tabel maken door gegevens uit een andere tabel te kopiëren. In dit geval gebruiken we eerst de CREATE TABLE
clausule met de naam voor nieuwe tabel (in ons voorbeeld:florist
), schrijven we vervolgens AS
en de SELECT
query met de namen van de kolommen (in ons voorbeeld:*
), en we schrijven dan FROM
gevolgd door de naam van de tabel waaruit de gegevens zijn verzameld (in ons voorbeeld:product
). Vervolgens kunt u elke SQL-clausule gebruiken:WHERE
, GROUP BY
, HAVING
, enz.
De nieuwe tafel florist
bevat de definitie van de kolommen van het product
tabel (id
, name
, category
, en price
). Het aantal rijen wordt beperkt door een WHERE-clausule te gebruiken, waarbij de records worden gefilterd om alleen gegevens op te halen uit de categorie bloem .
De SELECT INTO-structuur
Een andere oplossing is om SELECT INTO
. te gebruiken . Deze syntaxis is niet-standaard SQL, maar wordt ondersteund door veel populaire databases.
Oplossing 2:
SELECT id, name, price INTO florist FROM product WHERE category=’flower’;
Hier is het resultaat:
id | naam | prijs |
---|---|---|
105 | roos | 5,70 |
115 | tulp | 6.50 |
123 | zonnebloem | 7,50 |
155 | orchidee | 9,50 |
Discussie:
Als u een nieuwe tabel wilt maken op basis van de structuur en gegevens uit een andere tabel, kunt u de SELECT INTO
gebruiken clausule. Schrijf eerst een SELECT
clausule gevolgd door een lijst met kolommen (in ons voorbeeld:id
, name
, en price
) uit de bestaande tabel (in ons voorbeeld:product
).
Merk op dat er meer kolommen zijn in de tabel product
. We hebben alleen de kolommen geselecteerd waarin we geïnteresseerd zijn.
Gebruik vervolgens het trefwoord INTO
met de naam van de nieuwe tafel die u wilt maken (in ons voorbeeld:florist
). Schrijf vervolgens het trefwoord FROM met de naam van de bestaande tabel (in ons voorbeeld:product
).
Als u gefilterde rijen uit de tabel wilt selecteren, gebruikt u de WHERE
clausule. Na WHERE
, schrijf de voorwaarden om de gegevens te filteren (in ons voorbeeld:WHERE category=’flower’
).
In dit voorbeeld maken we een nieuwe tabel florist
die minder kolommen heeft dan de tabel product
(het verschil is de kolomcategorie). Deze nieuwe tabel heeft ook minder rijen – alleen de rijen met de categorie bloem .
Als u een tabel wilt maken met alle kolommen in de andere tabel, kunt u natuurlijk *
gebruiken in plaats van de kolommen te vermelden na SELECT
. Zie onderstaand voorbeeld:
Oplossing 2:
SELECT * INTO florist FROM product WHERE category=’flower’;
Hier is het resultaat:
id | naam | categorie | prijs |
---|---|---|---|
105 | roos | bloem | 5,70 |
115 | tulp | bloem | 6.50 |
123 | zonnebloem | bloem | 7,50 |
155 | orchidee | bloem | 9,50 |
Gebruik SELECT INTO
is een gemakkelijke manier om een nieuwe tabel te maken op basis van een bestaande tabel in de database.