Comment créer une table à partir d’une autre table

Nous avons déjà vu  comment on crée une table avec le langage SQL. Ici nous allons voir comment créer une table à partir  d’une table qui existe déjà.

Qu’entendons-nous par là ?




Bon voyons ! Si par exemple dans notre base de données nous voulons créer une table dont les champs sont identiques à ceux d’une autre table, nous pouvons directement nous servir de la table existante pour créer notre table. Et cela peut dans certains cas être plus avantageux dans la mesure où on peut aussi importer directement les données de l’autre table lors de la création.
Voyons clairement cela à partir d’un exemple. Imaginons que dans un lycée, on enregistre tous les élèves  dans une table nommée eleves.  Maintenant on veut créer une table nommée eleves_terminale contenant seulement les élèves de la classe de terminale. On sait très bien que les élèves de la classe de terminale existent déjà dans la table eleves.  Alors on peut se servir de cette dernière pour créer la table eleves_terminale.
Maintenant regardons cela de près.  Nous avons la table eleves contenant par exemples ces champs :
nom, prénom, age, sexe et classe. Et la table eleves_terminale que nous allons créer doit contenir les champs nom, prenom, age ,  sexe et classe.

Alors dans ce cas pour la création de notre fameuse table, on va faire ceci :
 

create table eleves_terminale as select * from eleves where classe= 'terminale' ;

Et la vous allez constater que la table eleves_terminale  a été non seulement créée, mais contient aussi les données exactes des élèves de classe de terminale (données qui sont dans la table eleves).

Et si par hasard je ne veux pas que les noms des champs de ma nouvelle table soient identiques à celles de la table mère ?

En faite, vous n’avez pas forcement besoin d’avoir les mêmes noms pour les champs. Vous pouvez nommer les champs comme vous voulez.
Un exemple, si vous voulez avoir nom1, prenom1, age1, et sexe1 comme champs de la table eleves_terminale, il suffit de faire ceci :
 

create table eleves_terminale (nom1 char(25), prenom 1 char(25), age1 int(20), sexe char(25)) as select nom,prenom,age1,sexe from eleves where classe= 'terminale ' ;

Avec cette dernière méthode, ça m’a permis aussi d’éliminer le champ classe car il n’est pas important de préciser la classe vu qu’on sait déjà qu’il s’agit de la classe de terminale.

Et si on veut que la nouvelle table soit vide ?

Dans ce cas, vous avez deux options :

  • Soit vous videz la table après l’avoir créée et remplie
  • Soit vous posez une condition qui ne sera jamais vérifié.