4.1 Instruction UPDATE SET
Si vous avez besoin de modifier des enregistrements existants dans la table, nous utilisons pour cela l'opérateur UPDATE
.
D'une part, l'opérateur UPDATE
est similaire à l'opérateur INSERT
, car nous devons spécifier de nouvelles valeurs pour les colonnes. Et d'autre part, sur l'opérateur SELECT
, car il permet de travailler immédiatement avec des groupes de données.
Important! Le but de l'opérateur UPDATE
est de modifier les données non pas dans une ligne du tableau, mais dans toutes les lignes qui remplissent une certaine condition. Et si vous faites une petite erreur, vous pouvez facilement perdre toutes les données du tableau.
Vue générale de la demande :
UPDATE table SET
column 1 = expression 1,
column 2 = expression 2,
column 3 = expression 3
WHERE condition;
Écrivons une requête qui augmentera le salaire de tous nos employés de 100. Notre requête ressemblera à ceci :
UPDATE employee SET
salary = salary+100;
Et maintenant, pour tous ceux qui ont un salaire inférieur à 50 000, nous allons également l'augmenter de 20 %. Exemple de demande :
UPDATE employee SET
salary = salary*1.2
WHERE salary<50000;
Et bien sûr, nous augmenterons le salaire du réalisateur de 2 fois, comment cela pourrait-il être sans lui :
UPDATE employee SET
salary = salary*2
WHERE id=4;
4.2 Scénarios complexes de changement de données
Si vous décidez de modifier les données de plusieurs tables en même temps, ou lorsque vous modifiez les données d'une table, vous devez la remplir avec les données d'une autre, ou simplement utiliser d'une manière ou d'une autre les données d'une autre table pour modifier la première, puis des surprises nous attendent.
Essayons de changer le niveau de tous les utilisateurs de la table des utilisateurs qui existent dans la table des employés. Pour plus de simplicité, nous vérifierons la coïncidence des utilisateurs par leur nom.
Comment voudrions-nous écrire cette requête :
UPDATE user SET
level = 80,
WHERE user . name IN ( list of names from employee table );
Eh bien, ajoutons une liste de noms de la table employee à cette requête :
UPDATE user SET
level = 80,
WHERE user.name IN (select name from employee);
Intéressant! La requête SQL elle-même pour obtenir les noms s'est avérée encore plus courte que la description de la tâche. Les créateurs de SQL n'ont pas mangé leur pain en vain.
Forcé de te contrarier -cette approche ne fonctionnera pas. Vous devez d'abord joindre ces tables, cela ressemblera à ceci :
UPDATE table 1, table 2 SET
column 1 = expression 1,
column 2 = expression 2,
column 3 = expression 3
WHERE table 1.id = table 2.ref_id;
Rendons-le un peu plus difficile. Vous devez définir le niveau à 80 uniquement pour les bons employés dont le salaire sera supérieur à 50 000. La solution complète ressemblera à ceci :
UPDATE user, good_employees SET
user.level = 80
WHERE user.name = good_employees.name;
Une telle jointure de tables est en fait INNER JOIN
, de sorte qu'à la fin, seuls les utilisateurs qui ont une correspondance par nom dans la deuxième table resteront.
Mais nous devons toujours sélectionner de bons employés d'une manière ou d'une autre, alors ajoutons un peu plus de code :
SELECT * FROM employee WHERE salary >= 50000
Et maintenant, nous remplaçons cette table dans notre requête finale :
UPDATE user,
(SELECT * FROM employee WHERE salary >= 50000) good_emps
SET
user.level = 80
WHERE user.name = good_emps.name;
Vivez avec maintenant.