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.
- 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;
sqlLa 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;
sqlIci, 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;
sqlDé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 ;
sqlNous 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' ;
sqlVoici 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.
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 !