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.