Instruction INSERT INTO VALUES()

Nous avons compris comment créer des tables, examinons maintenant en détail comment ajouter des données à une table à l'aide d'une requête SQL.

En fait, c'est très simple à faire, mais il y a plusieurs nuances. L'option la plus simple pour insérer des données dans une table nécessite de spécifier deux choses :

  • noms de colonnes
  • valeurs de colonne (données)

Les noms de colonnes doivent être spécifiés, car très souvent les colonnes ont des valeurs par défaut qui ne sont pas spécifiées lors de l'insertion des données. Et généralement, chaque table a au moins une colonne de ce type, par exemple l'identifiant de la ligne.

La forme générale de la requête d'insertion de données dans une table ressemble à ceci :

INSERT INTO table (column1, column2, column3) VALUES
    (value1, value2, value3),
    (value1, value2, value3),
    (value1, value2, value3);

Par exemple, si vous souhaitez insérer un nouvel enregistrement dans la table utilisateur, voici à quoi ressemblerait la requête :

INSERT INTO user (name, level, created_time) VALUES
	('Rabinovich', 5, ‘2022-06-06’);

Instruction INSERT INTO SELECT

Un autre scénario courant pour insérer des données dans une table consiste à les extraire d'une autre table, d'un schéma ou même d'un SGBD.

Pour ce faire, il existe un autre format de requête INSERT INTO, dans lequel, au lieu de la partie VALUES, vous pouvez spécifier une requête pour sélectionner des données.

La forme générale d'une telle demande est :

INSERT INTO table (column1, column2, column3)
SELECT-request;

Écrivons une requête qui ajoutera tous les utilisateurs de la table employee à la table user :

INSERT INTO user (name, created_time)
   SELECT employee.name, employee.join_date
   FROM employee;

Nous avons diverses données dans la table des employés, mais à partir d'elles, nous ne sélectionnons que deux champs - le nom et l'heure d'arrivée dans l'entreprise.

En outre, la table des utilisateurs vous oblige à spécifier le niveau d'utilisateur - niveau. Les employés n'ont pas de niveau dans la table des employés, nous allons donc utiliser le fait que la table des utilisateurs a une valeur par défaut pour le champ de niveau. Nous ne spécifions tout simplement pas le niveau et SQL définira la valeur par défaut.

Supposons que nous ne soyons pas satisfaits de la valeur par défaut et que nous souhaitions que le niveau soit 99 et que nous remplacions user.created_time par la date d'aujourd'hui, nous pouvons alors écrire ceci :

INSERT INTO user (name, level, created_time)
   SELECT employee.name, 99, CURDATE()
   FROM employee;

Il y a beaucoup plus qui pourrait être fait, mais je pense que cela suffira pour l'instant. Vous pouvez en savoir plus sur la page officielle de MySQL.