Retour à la liste des articles Articles
8 minutes de lecture

Comment mettre à jour uniquement les 10 premiers rangs en SQL

Les bases de données du monde réel nécessitent une mise à jour continue. Souvent, vous devez mettre à jour des enregistrements spécifiques ; vous pouvez même vouloir mettre à jour uniquement la première ligne, ou les 10, 100 ou 1000 premières lignes. Voyons comment mettre à jour des lignes pour une quantité spécifiée en partant du haut en SQL.

Qu'est-ce que l'instruction SQL UPDATE ?

En SQL, une instruction UPDATE modifie les enregistrements existants d'une table. Vous pouvez choisir de mettre à jour des colonnes entières ou des lignes filtrées à l'aide d'une instruction WHERE. Comme nous le verrons dans cet article, vous pouvez également mettre à jour des lignes pour une quantité spécifiée depuis le haut de votre table.

La mise à jour des bases de données est l'une des principales responsabilités des ingénieurs et des administrateurs de données, ainsi que de toute personne travaillant avec des bases de données. Consultez ce guide détaillé pour obtenir des explications et des exemples de SQL UPDATE adaptés aux débutants.

Pour apprendre toutes les bases de la modification des bases de données, consultez notre cours interactif Comment modifier une base de données avec SQL. Grâce à 52 exercices SQL interactifs, vous apprendrez à récupérer, stocker, modifier, supprimer, insérer et mettre à jour des données avec le langage de manipulation des données SQL (DML). Si vous êtes très novice en matière de SQL, je vous recommande de suivre le SQL pour les débutants cours interactif avant de passer au langage de manipulation des données.

Comment mettre à jour un seul rang en SQL

La meilleure façon de comprendre le fonctionnement de SQL UPDATE est de le voir en action. Commençons donc par un exemple.

Nous avons une table de nos fournisseurs, avec l'ID de la société, le nom de la société, le nom de la personne de contact et le volume des produits et services fournis en 2021 (en USD).

suppliers
idcompany_namecontact_namevolume_2021
1Dunder MifflinMichael Scott456388.40
2Eco FocusRobert California203459.30
3Max EnergyRoy Anderson1403958.80
4Apples and OrangesTodd Packer2303479.50
5Top SecurityJo Bennett105000.10
6InnovatorsAndy Bernard567980.00
7Big Data CorpOscar Martinez345678.90
8Miami and partnersStanley Hudson1205978.80
9Lots of FunPhyllis Vance490345.40
10Repair IncDarryl Philbin53673.30
11Best AccountantsKevin Malone534512.20
12Time & MoneyMeredith Palmer78905.20
13Two BossesJim Halpert250350.10
14Epic AdventureRyan Howard87078.00
15Schrute MarketingDwight Schrute3450250.50

Restons simples et commençons par mettre à jour une seule ligne de la table. Plus précisément, disons que nous venons d'apprendre que la personne à contacter pour "Lots of Fun" est passée de Phyllis Vance à Pam Beesly. Nous voulons mettre à jour le nom du contact pour la société ayant l'ID 9. Voici une requête que nous pouvons utiliser :

UPDATE suppliers
SET contact_name = 'Pam Beesly'
WHERE id = 9;

La syntaxe est simple. Après le mot-clé UPDATE, nous spécifions le nom de la table que nous voulons mettre à jour. Ensuite, avec le mot-clé SET, nous définissons quelle colonne (par exemple, contact_name) doit être mise à jour avec quelle valeur (par exemple, Pam Beesley). Enfin, nous utilisons le mot-clé WHERE pour spécifier que seul l'enregistrement avec l'ID de la société 9 doit être mis à jour.

Voici la table mise à jour. Comme vous le voyez, nous avons maintenant une nouvelle personne de contact pour "Lots of Fun" :

idcompany_namecontact_namevolume_2021
1Dunder MifflinMichael Scott456388.40
2Eco FocusRobert California203459.30
3Max EnergyRoy Anderson1403958.80
4Apples and OrangesTodd Packer2303479.50
5Top SecurityJo Bennett105000.10
6InnovatorsAndy Bernard567980.00
7Big Data CorpOscar Martinez345678.90
8Miami and partnersStanley Hudson1205978.80
9Lots of FunPam Beesley490345.40
10Repair IncDarryl Philbin53673.30
11Best AccountantsKevin Malone534512.20
12Time & MoneyMeredith Palmer78905.20
13Two BossesJim Halpert250350.10
14Epic AdventureRyan Howard87078.00
15Schrute MarketingDwight Schrute3450250.50

Passons maintenant à un cas plus complexe dans lequel nous mettons à jour plusieurs lignes.

Comment mettre à jour un nombre spécifique de lignes

Il existe de nombreux scénarios différents dans lesquels vous devez mettre à jour plusieurs lignes. Le plus souvent, vous sélectionnez les lignes que vous souhaitez mettre à jour à l'aide de conditions de filtrage dans une instruction WHERE.

Toutefois, nous nous concentrons ici sur le cas où vous souhaitez mettre à jour des lignes pour une quantité spécifique en partant du haut, par exemple, les 10 premiers enregistrements.

Nous continuons avec notre premier exemple mais avec quelques mises à jour. Disons que nous voulons ajouter une autre colonne, top_supplier, à notre table suppliers tableau. Dans cette colonne, nous voulons voir :

  • "Oui" si le fournisseur est l'un des 10 premiers par le montant que nous avons payé à l'entreprise l'année dernière, ou
  • "Non" pour tous les autres fournisseurs.

Je suggère de faire cela en trois étapes :

  1. Ajoutez une nouvelle colonne top_supplier.
  2. Définissez la valeur de cette colonne sur "Non" pour tous les enregistrements.
  3. Mettez à jour la valeur de cette colonne à "Oui" pour les 10 premiers fournisseurs.

Voici comment nous pouvons accomplir les deux premières étapes :

ALTER TABLE suppliers
ADD top_supplier varchar(32);

UPDATE suppliers
SET top_supplier = 'No';

Et voici le tableau résultant :

<
suppliers
idcompany_namecontact_namevolume_2021top_supplier
1Dunder MifflinMichael Scott456388.40No
2Eco FocusRobert California203459.30No
3Max EnergyRoy Anderson1403958.80No
4Apples and OrangesTodd Packer2303479.50No
5Top SecurityJo Bennett105000.10No
6InnovatorsAndy Bernard567980.00No
7Big Data CorpOscar Martinez345678.90No
8Miami and partnersStanley Hudson1205978.80No
9Lots of FunPhyllis Vance490345.40No
10Repair IncDarryl Philbin53673.30No
11Best AccountantsKevin Malone534512.20No
12Time & MoneyMeredith Palmer78905.20No
13Two BossesJim Halpert250350.10No
14Epic AdventureRyan Howard87078.00No
15Schrute MarketingDwight Schrute3450250.50No

Vient maintenant la partie la plus intéressante : la mise à jour de la colonne top_supplier pour les 10 premières lignes après avoir ordonné la table par la colonne volume_2021. La syntaxe de la requête pour accomplir cette troisième étape dépend du système de gestion de la base de données (par exemple, MySQL, SQL Server, Oracle ou PostgreSQL). Pour l'instant, je vais vous montrer des requêtes fonctionnelles pour quelques-uns des systèmes de gestion de base de données les plus populaires.

MySQL

Dans MySQL, nous pouvons utiliser le mot-clé LIMIT qui limite le nombre d'enregistrements à afficher ou à mettre à jour :

UPDATE suppliers
SET top_supplier = 'Yes'
ORDER BY volume_2021 DESC
LIMIT 10;

Avec cette requête, nous mettons à jour la table suppliers en fixant la valeur de la colonne top_supplier à "Oui". Cependant, nous voulons que ces mises à jour concernent uniquement les 10 premiers fournisseurs. Nous ordonnons donc la table en fonction de la colonne volume_2021 (par ordre décroissant), puis nous limitons le nombre de lignes à mettre à jour à 10. Si vous avez besoin de rafraîchir vos connaissances sur ORDER BY, consultez cet article détaillé.

Voici la table mise à jour, classée par volume_2021. Comme vous le voyez, seuls les 10 premiers fournisseurs ont "Oui" dans la dernière colonne. Utilisez la même syntaxe pour mettre à jour uniquement la première ligne, ou les 5, 20, 100 premières lignes, ou tout autre nombre de lignes en changeant simplement le nombre après le mot-clé LIMIT.

idcompany_namecontact_namevolume_2021top_supplier
15Schrute MarketingDwight Schrute3450250.50Yes
4Apples and OrangesTodd Packer2303479.50Yes
3Max EnergyRoy Anderson1403958.80Yes
8Miami and partnersStanley Hudson1205978.80Yes
6InnovatorsAndy Bernard567980.00Yes
11Best AccountantsKevin Malone534512.20Yes
9Lots of FunPhyllis Vance490345.40Yes
1Dunder MifflinMichael Scott456388.40Yes
7Big Data CorpOscar Martinez345678.90Yes
13Two BossesJim Halpert250350.10Yes
2Eco FocusRobert California203459.30No
5Top SecurityJo Bennett105000.10No
14Epic AdventureRyan Howard87078.00No
12Time & MoneyMeredith Palmer78905.20No
10Repair IncDarryl Philbin53673.30No

SQL Server

Contrairement à MySQL, le serveur SQL ne dispose pas du mot clé LIMIT. Il dispose plutôt de TOP. Utilisez ce mot-clé dans une sous-requête pour obtenir les ID des 10 premiers fournisseurs :

UPDATE suppliers
SET top_supplier = 'Yes'
WHERE id IN(
        SELECT TOP (10) id
        FROM suppliers
        ORDER BY volume_2021 DESC);

Ensuite, nous mettons à jour la colonne top_supplier pour les enregistrements dont les ID correspondants sont trouvés dans la liste créée par la sous-requête.

PostgreSQL et Oracle

Enfin, PostgreSQL et Oracle proposent un autre moyen de limiter le nombre de lignes à mettre à jour. Comme pour la requête précédente, nous utilisons une sous-requête. Avec cette sous-requête, nous ordonnons la table suppliers par le montant payé, puis nous limitons la sortie à 10 enregistrements en utilisant les mots-clés FETCH FIRST 10 ROWS ONLY:

UPDATE suppliers
SET top_supplier = 'Yes'
WHERE id IN(
        SELECT id
        FROM suppliers
        ORDER BY volume_2021 DESC
        FETCH FIRST 10 ROWS ONLY);

Comme vous le voyez, nous ne mettons à jour que les enregistrements correspondants dans la requête principale.

Obtenez plus d'exemples de sous-requêtes pour l'instruction UPDATE dans cet article détaillé. Vous trouverez également d'autres exemples avec INSERT, UPDATE, et DELETE ici.

Il est temps de s'entraîner avec les cours de SQL en ligne !

SQL est un outil d'analyse puissant qui surpasse généralement Excel en termes d'efficacité et d'efficience. C'est également l'un des langages de programmation modernes qui sont là pour rester. SQL n'est pas difficile à apprendre, mais il existe souvent plusieurs façons différentes d'accomplir la même tâche. En outre, il existe certaines différences de syntaxe entre les systèmes de gestion de bases de données.

L'approche la plus efficace pour obtenir une compréhension complète de SQL est de suivre des cours en ligne sur SQL. Si vous n'avez aucune expérience de SQL, je vous recommande de commencer par le cours SQL pour les débutants cours. Il comprend 129 exercices SQL interactifs pour couvrir toutes les bases dont vous avez besoin pour récupérer des données dans une base de données.

Si vous souhaitez également savoir comment modifier votre base de données, consultez le cours Comment modifier une base de données avec SQL. Ce cours interactif couvre les bases du langage de manipulation des données pour vous aider à étendre et à mettre à jour votre base de données selon vos besoins.

Lorsque vous êtes prêt à aller au-delà des cours individuels et à acquérir une connaissance complète des fonctionnalités de SQL, consultez nos pistes d'apprentissage :

  • Le SQL de A à Z pour être à l'aise avec les concepts SQL de base et avancés tels que les fonctions de fenêtre, les requêtes récursives et GROUP BY
  • Création de la structure de la base de données pour apprendre à créer et à gérer des tables, des vues et des index dans les systèmes de gestion de bases de données relationnelles les plus répandus, tels que MySQL, SQL Server, Oracle et PostgreSQL.

Merci de votre lecture et bon apprentissage !