Problème :
Vous souhaitez créer une nouvelle table avec des données copiées d'une autre table.
Exemple :
Notre base de données a une table nommée product
avec des données dans les colonnes suivantes :id
(clé primaire), name
, category
, et price
.
identifiant | nom | catégorie | prix |
---|---|---|---|
105 | rose | fleur | 5.70 |
108 | bureau | meubles | 120.00 |
115 | tulipe | fleur | 6,50 |
123 | tournesol | fleur | 7,50 |
145 | guitare | musique | 300.00 |
155 | orchidée | fleur | 9.50 |
158 | flûte | musique | 156.00 |
Dans la base de données, créons une nouvelle table nommée florist
qui stockera les colonnes suivantes :id
, name
, et price
. Ces colonnes proviennent de la table product
mais uniquement de la catégorie fleur .
Il est important de noter que nous créons une nouvelle table. La table florist
n'existe pas dans cette base de données.
La structure CREATE TABLE AS SELECT
Pour créer une nouvelle table à partir d'une autre table, vous pouvez utiliser CREATE TABLE AS SELECT
. Cette construction est du SQL standard. Regardez le code SQL ci-dessous :
Solution 1 :
CREATE TABLE florist AS SELECT * FROM product WHERE category = ’flower’;
Voici le résultat de la requête :
identifiant | nom | catégorie | prix |
---|---|---|---|
105 | rose | fleur | 5.70 |
115 | tulipe | fleur | 6,50 |
123 | tournesol | fleur | 7,50 |
155 | orchidée | fleur | 9.50 |
Utilisation de CREATE TABLE
, vous pouvez créer une nouvelle table en copiant les données d'une autre table. Dans ce cas, nous utilisons d'abord le CREATE TABLE
clause avec le nom de la nouvelle table (dans notre exemple :florist
), on écrit ensuite AS
et le SELECT
requête avec les noms des colonnes (dans notre exemple :*
), et on écrit alors FROM
suivi du nom de la table à partir de laquelle les données sont collectées (dans notre exemple :product
). Ensuite, vous pouvez utiliser n'importe quelle clause SQL :WHERE
, GROUP BY
, HAVING
, etc.
La nouvelle table florist
contiendra la définition des colonnes du product
tableau (id
, name
, category
, et price
). Le nombre de lignes est limité en utilisant une clause WHERE, en filtrant les enregistrements pour ne récupérer que les données de la catégorie fleur .
La structure SELECT INTO
Une autre solution consiste à utiliser SELECT INTO
. Cette syntaxe est du SQL non standard, mais elle est prise en charge par de nombreuses bases de données populaires.
Solution 2 :
SELECT id, name, price INTO florist FROM product WHERE category=’flower’;
Voici le résultat :
identifiant | nom | prix |
---|---|---|
105 | rose | 5.70 |
115 | tulipe | 6,50 |
123 | tournesol | 7,50 |
155 | orchidée | 9.50 |
Discussion :
Si vous souhaitez créer une nouvelle table basée sur la structure et les données d'une autre table, vous pouvez utiliser le SELECT INTO
clause. Tout d'abord, écrivez un SELECT
clause suivie d'une liste de colonnes (dans notre exemple :id
, name
, et price
) à partir de la table existante (dans notre exemple :product
).
Notez qu'il y a plus de colonnes dans la table product
. Nous n'avons sélectionné que les colonnes qui nous intéressent.
Ensuite, utilisez le mot-clé INTO
avec le nom de la nouvelle table que vous souhaitez créer (dans notre exemple :florist
). Ensuite, écrivez le mot-clé FROM avec le nom de la table existante (dans notre exemple :product
).
Si vous souhaitez sélectionner des lignes filtrées dans le tableau, utilisez le WHERE
clause. Après WHERE
, écrivez les conditions pour filtrer les données (dans notre exemple :WHERE category=’flower’
).
Dans cet exemple, nous créons une nouvelle table florist
qui a moins de colonnes que la table product
(la différence est la catégorie de colonne). Ce nouveau tableau a également moins de lignes - uniquement les lignes avec la catégorie fleur .
Bien sûr, si vous souhaitez créer une table en utilisant toutes les colonnes de l'autre table, vous pouvez utiliser *
au lieu de lister les colonnes après SELECT
. Voir l'exemple ci-dessous :
Solution 2 :
SELECT * INTO florist FROM product WHERE category=’flower’;
Voici le résultat :
identifiant | nom | catégorie | prix |
---|---|---|---|
105 | rose | fleur | 5.70 |
115 | tulipe | fleur | 6,50 |
123 | tournesol | fleur | 7,50 |
155 | orchidée | fleur | 9.50 |
Utilisation de SELECT INTO
est un moyen simple de créer une nouvelle table basée sur une table existante dans la base de données.