MySQL - Insert Into Select : Un Guide Complet pour les Débutants

Bonjour à tous, futurs magiciens des bases de données ! Aujourd'hui, nous allons entreprendre un voyage passionnant dans le monde de MySQL, en nous concentrant spécifiquement sur l'instruction puissante "Insert Into Select". Ne vous inquiétez pas si vous êtes nouveau dans le monde de la programmation - je serai votre guide amical, expliquant tout pas à pas. Alors, prenez une tasse de café et plongez avec moi !

MySQL - Insert Into Select

L'Instruction MySQL Insert Into Select

Imaginez que vous êtes en train d'organiser votre étagère à livres. Vous avez une pile de livres neufs (appelons cela nos données source) et vous souhaitez les ajouter à votre étagère déjà organisée (notre table cible). C'est essentiellement ce que fait l'instruction "Insert Into Select" dans MySQL - elle nous permet de copier des données d'une table et de les insérer dans une autre.

La syntaxe de base ressemble à ceci :

INSERT INTO target_table (column1, column2, column3, ...)
SELECT column1, column2, column3, ...
FROM source_table
WHERE condition;

Décomposons cela :

  • INSERT INTO target_table : c'est là que nous mettons nos nouvelles données.
  • (column1, column2, ...) : ce sont les colonnes de notre table cible que nous remplissons.
  • SELECT ... : c'est d'où nous obtenons nos données.
  • FROM source_table : c'est la table que nous copions.
  • WHERE condition : c'est facultatif, mais il nous permet de filtrer ce que nous copions.

Insérer des Données Nécessaires d'une Table à une Autre Table

Maintenant, mettons les mains dans le cambouis avec du code réel ! Supposons que nous avons deux tables : old_books et new_arrivals. Nous souhaitons déplacer tous les livres de fantasy de old_books vers new_arrivals.

INSERT INTO new_arrivals (title, author, genre)
SELECT title, author, genre
FROM old_books
WHERE genre = 'Fantasy';

Dans cet exemple :

  • Nous insérons dans new_arrivals, en spécifiant les colonnes que nous voulons remplir.
  • Nous sélectionnons les mêmes colonnes de old_books.
  • Nous ne sélectionnons que les livres dont le genre est 'Fantasy'.

Cette requête copiera tous les livres de fantasy de old_books vers new_arrivals. C'est comme magiquement téléporter tous vos livres de fantasy vers une nouvelle étagère !

Insérer les lignes avec LIMIT

Parfois, nous ne voulons pas tout déplacer d'un coup. Peut-être que nous testons des choses, ou que nous n'avons de la place que pour quelques livres. C'est là que LIMIT devient pratique.

INSERT INTO bestsellers (title, author, sales)
SELECT title, author, sales
FROM all_books
WHERE sales > 1000000
ORDER BY sales DESC
LIMIT 10;

Cette requête :

  • Insère dans notre table bestsellers.
  • Sélectionne de all_books où les ventes sont supérieures à un million.
  • Les trie par ventes en ordre décroissant.
  • Ne prend que les 10 premiers.

C'est comme choisir le meilleur du meilleur - seuls les 10 best-sellers arrivent sur notre étagère spéciale !

Insérer toutes les Colonnes d'une Table à une Autre Table

Parfois, nous voulons copier tout - chaque détail. Nous pouvons aussi le faire ! Supposons que nous archivons toutes nos données de ventes de 2022 :

INSERT INTO sales_archive_2022
SELECT *
FROM current_sales
WHERE YEAR(sale_date) = 2022;

Voici ce qui se passe :

  • Nous ne spécifions pas de colonnes dans la partie INSERT INTO.
  • Nous utilisons SELECT * pour sélectionner toutes les colonnes.
  • Nous filtrons pour inclure uniquement les ventes de 2022.

C'est comme prendre une photo de toute votre étagère de 2022 et la recréer exactement à un nouvel emplacement.

INSERT INTO SELECT Utilisant un Programme Client

Maintenant, parlons de comment nous pouvons faire cela en dehors de MySQL, en utilisant un programme client. Je vous montrerai un exemple en utilisant Python, qui est un langage populaire pour les opérations de base de données.

import mysql.connector

# Se connecter à la base de données
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="yourdatabase"
)

mycursor = mydb.cursor()

# Notre requête INSERT INTO SELECT
sql = """
INSERT INTO new_arrivals (title, author, genre)
SELECT title, author, genre
FROM old_books
WHERE genre = 'Fantasy'
"""

# Exécuter la requête
mycursor.execute(sql)

# Valider les modifications
mydb.commit()

print(mycursor.rowcount, "enregistrements insérés.")

Ce script :

  1. Se connecte à votre base de données MySQL.
  2. Crée un objet curseur pour interagir avec la base de données.
  3. Définit notre requête INSERT INTO SELECT.
  4. Exécute la requête.
  5. Valide les modifications (très important !).
  6. Affiche le nombre d'enregistrements insérés.

C'est comme avoir un assistant robot qui peut réorganiser vos étagères pour vous !

Conclusion

Et voilà, les amis ! Nous avons fait le voyage à travers le pays de "Insert Into Select" dans MySQL. Du concept de base aux applications pratiques, nous avons couvert tout. Souvenez-vous, la pratique rend parfait, donc n'ayez pas peur d'expérimenter avec ces requêtes.

Voici un tableau de référence rapide des méthodes que nous avons discutées :

Méthode Description Exemple
Insert Into Select de Base Copier des données d'une table à une autre INSERT INTO target SELECT * FROM source
Insérer des Colonnes Spécifiques Copier uniquement certaines colonnes INSERT INTO target (col1, col2) SELECT col1, col2 FROM source
Insérer avec Condition Copier des données qui remplissent certains critères INSERT INTO target SELECT * FROM source WHERE condition
Insérer avec LIMIT Copier un nombre limité de lignes INSERT INTO target SELECT * FROM source LIMIT 10
Insérer toutes les Colonnes Copier toutes les colonnes sans spécification INSERT INTO target SELECT * FROM source
Utiliser un Programme Client Exécuter Insert Into Select en dehors de MySQL Voir l'exemple Python ci-dessus

Bonne requête, et puisse vos bases de données toujours être organisées et efficaces !

Credits: Image by storyset