SQL INSERT INTO SELECT : copier/coller des données d’une table à une autre

L’instruction 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 Structured Query Language (SQL) vous permet de créer de nombreuses tables dans une base de données et de les alimenter en données. Il peut arriver que vous souhaitiez transfé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 possibilité de les copier et de les coller à l’endroit souhaité. L’instruction approprié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à existantes 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 identiques.

Serveurs virtuels (VPS)
Faites le choix de la performance
  • Virtualisation complète avec accès root
  • Trafic illimité et jusqu'à 1 Gbit/s de bande passante
  • Stockage SSD NVMe rapide et édition Plesk Web Host

Syntaxe et fonctionnement

La syntaxe de SQL INSERT INTO SELECT diffère selon que vous souhaitez copier toutes les colonnes d’une table à une autre ou uniquement certaines colonnes sélectionné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 facultative et permet de filtrer les lignes à insérer.

Si vous voulez seulement transfé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 diffé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 identiques. Les colonnes pour lesquelles aucune donnée n’est disponible contiendront la valeur NULL.

Copier et coller la table entière

Pour vous montrer comment SQL INSERT INTO SELECT fonctionne dans la pratique, nous allons créer un exemple de table appelé « Liste de clients_2023 ». Celle-ci contient des informations 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 Strasbourg 9
1212 Sulis Strasbourg 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 complètement 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 Strasbourg 9
1212 Sulis Strasbourg 15
1431 Verdon Lille 22
1118 Paré Paris 10

Transférer des colonnes sélectionnées

Il peut également arriver que vous ne souhaitiez transfé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électionnons maintenant 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 Strasbourg
1212 Sulis Strasbourg
1431 Verdon Lille
1118 Paré Paris

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

Intégrer des conditions pour le report

Vous pouvez aussi utiliser une condition WHERE pour ne copier que certaines lignes sélectionnées. Pour notre tableau, nous souhaitons par exemple ne transférer que les clients de Strasbourg. 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 Strasbourg 9
1212 Sulis Strasbourg 15

Alternative à SQL INSERT INTO SELECT

Une alternative à SQL INSERT INTO SELECT est SELECT INTO. Les deux instructions sont utilisées pour transférer des données d’une table à une autre. De plus, elles agissent comme partie d’une instruction plus large. Cependant, alors que SQL INSERT INTO SELECT nécessite une table existante dans laquelle transférer les données, SELECT INTO crée une nouvelle table.

Conseil

Vous avez le choix ! Avec le serveur d’hébergement SQL de IONOS, vous pouvez utiliser MSSQL, MySQL ou MariaDB. Des performances de pointe, de puissantes fonctions de sécurité et un conseil personnalisé sont garantis dans tous les cas !

Cet article vous a-t-il été utile ?
Page top