L’ins­truc­tion SQL INSERT INTO SELECT est utilisée pour copier des données d’une table vers une autre. Pour cela, la nouvelle table doit déjà être créée. Les colonnes sans contenu reçoivent la valeur NULL par défaut dans la nouvelle table.

SQL INSERT INTO SELECT : qu’est-ce que c’est ?

Le Struc­tu­red Query Language (SQL) vous permet de créer de nom­breuses tables dans une base de données et de les alimenter en données. Il peut arriver que vous sou­hai­tiez trans­fé­rer une partie ou la totalité des données d’une table vers une autre. Au lieu de saisir à nouveau toutes les données, vous avez la pos­si­bi­lité de les copier et de les coller à l’endroit souhaité. L’ins­truc­tion ap­pro­priée pour ce projet est SQL INSERT INTO SELECT. Celle-ci copie les données selon vos souhaits et les insère dans le nouveau tableau. Ce faisant, les entrées déjà exis­tantes ne sont pas écrasées. La condition préalable est que le type de données de la table d’origine et de la nouvelle table soient iden­tiques.

Serveurs virtuels (VPS)
VPS éco­no­miques sur serveurs Dell En­ter­prise
  • 1 Gbit/s de bande passante et trafic illimité
  • Dis­po­ni­bi­lité de 99,99 % et cer­ti­fi­ca­tion ISO
  • As­sis­tance 24/7 primée pour sa qualité et con­seil­ler personnel

Syntaxe et fonc­tion­ne­ment

La syntaxe de SQL INSERT INTO SELECT diffère selon que vous souhaitez copier toutes les colonnes d’une table à une autre ou uni­que­ment certaines colonnes sé­lec­tion­nées. Pour un transfert complet, voici la structure du code :

INSERT INTO nouvelle_table
SELECT * FROM ancienne_table
WHERE condition;
sql

La condition WHERE est fa­cul­ta­tive et permet de filtrer les lignes à insérer.

Si vous voulez seulement trans­fé­rer certaines colonnes de votre choix et non la table entière, voici le code à entrer :

INSERT INTO nouvelle_table (colonne1, colonne2, colonne3, ...)
SELECT colonne1, colonne2, colonne3, ... FROM ancienne_table
WHERE condition;
sql

Ici, vous spécifiez donc les dif­fé­rentes colonnes et utilisez également la commande SQL SELECT pour les choisir. Dans les deux cas, il est important que la table nouvelle_table soit déjà créée dans la base de données. De plus, les noms de toutes les colonnes de l’ancienne et de la nouvelle table doivent être iden­tiques. Les colonnes pour les­quelles aucune donnée n’est dis­po­nible con­tien­dront la valeur NULL.

Copier et coller la table entière

Pour vous montrer comment SQL INSERT INTO SELECT fonc­tionne dans la pratique, nous allons créer un exemple de table appelé « Liste de clients_2023 ». Celle-ci contient des in­for­ma­tions sur le numéro de client, le nom, la ville et le nombre d’articles commandés par chacun des clients. Elle se présente ainsi :

Numéro de client Nom Ville Articles
1427 Berron Paris 13
1377 Froissy Stras­bourg 9
1212 Sulis Stras­bourg 15
1431 Verdon Lille 22
1118 Paré Paris 10

Il existe nouveau tableau intitulé « Liste de clients_2024 ». Ce dernier est jusqu’à présent vide.

Si nous voulons insérer com­plè­te­ment les entrées de la table « Liste de clients_2023 » dans la nouvelle table « Liste de clients_2024 », nous procédons comme suit :

INSERT INTO Liste de clients_2024
SELECT * FROM Liste de clients_2023;
sql

Désormais, toutes les entrées de l’ancienne liste de clients se trouvent dans la nouvelle liste de clients :

Numéro de client Nom Ville Articles
1427 Berron Paris 13
1377 Froissy Stras­bourg 9
1212 Sulis Stras­bourg 15
1431 Verdon Lille 22
1118 Paré Paris 10

Trans­fé­rer des colonnes sé­lec­tion­nées

Il peut également arriver que vous ne sou­hai­tiez trans­fé­rer que certaines colonnes. Par exemple, dans notre cas, le nombre d’articles commandés pourrait ne pas être pertinent pour le nouveau tableau. C’est pourquoi nous ne sé­lec­tion­nons main­te­nant que certaines colonnes pour la copie :

INSERT INTO Liste de clients_2024 (Numéro de client, Nom, Ville)
SELECT Numéro de client, Nom, Ville FROM Liste de clients_2023 ;
sql

Nous obtenons ainsi ce nouveau tableau :

Numéro de client Nom Ville Articles
1427 Berron Paris
1377 Froissy Stras­bourg
1212 Sulis Stras­bourg
1431 Verdon Lille
1118 Paré Paris

La colonne « Articles » ne contient donc que des entrées avec la valeur NULL.

Intégrer des con­di­tions pour le report

Vous pouvez aussi utiliser une condition WHERE pour ne copier que certaines lignes sé­lec­tion­nées. Pour notre tableau, nous sou­hai­tons par exemple ne trans­fé­rer que les clients de Stras­bourg. Le code approprié est celui-ci :

INSERT INTO Liste de clients_2024
SELECT * FROM Liste de clients_2023
WHERE Ville = 'Strasbourg' ;
sql

Voici le contenu de notre nouvelle table :

Numéro de client Nom Vile Articles
1377 Froissy Stras­bourg 9
1212 Sulis Stras­bourg 15

Al­ter­na­tive à SQL INSERT INTO SELECT

Une al­ter­na­tive à SQL INSERT INTO SELECT est SELECT INTO. Les deux ins­truc­tions sont utilisées pour trans­fé­rer des données d’une table à une autre. De plus, elles agissent comme partie d’une ins­truc­tion plus large. Cependant, alors que SQL INSERT INTO SELECT nécessite une table existante dans laquelle trans­fé­rer les données, SELECT INTO crée une nouvelle table.

Conseil

Vous avez le choix ! Avec le serveur d’hé­ber­ge­ment SQL de IONOS, vous pouvez utiliser MSSQL, MySQL ou MariaDB. Des per­for­mances de pointe, de puis­santes fonctions de sécurité et un conseil per­son­na­lisé sont garantis dans tous les cas !

Aller au menu principal