Clause IN et BETWEEN avec MySQL

Pour un petit travail façon Big Data j’ai eu à saisir à peu près 11 000 lignes dans une base de données.
Évidemment il y a eu quelques erreurs de saisie, aux alentours de 7 000 pour être précis.
C’était donc l’occasion rêvée de réaliser un update massif et donc d’utiliser les clauses IN et BETWEEN.

La requête UPDATE

Basiquement pour mettre à jour est extrêmement simple.

UPDATE `scores`
SET `elections_id_scores`= 2
WHERE `candidats_id_scores`  = 76;

Le hic c’est que si vous avez 54 candidats (oui c’est un travail sur les résultats des élections) à mettre à jour le volume de travail est assez conséquent. Et évidemment lorsqu’on bosse dans la programmation on est fainéant, sinon on ne fait pas carrière. C’est là que les clauses IN et BETWEEN interviennent.

La clause IN

UPDATE `scores`
SET `elections_id_scores`= 2
WHERE `candidats_id_scores` IN (76, 77, 78);

La clause IN permet de passer un liste de données à la clause WHERE. L’écriture est très simple, les valeurs sont entre parenthèses et elles sont séparées par des virgules.
Si ces valeurs sont des chaînes de caractères n’oubliez pas de les mettre entre guillemets. Ce qui donne ça, par exemple : ("nom du premier candidat", "nom du deuxième candidat").

La clause BETWEEN

UPDATE `scores`
SET `elections_id_scores`= 2
WHERE `candidats_id_scores` BETWEEN 76 AND 129;

En anglais BETWEEN signifie « entre », il s’agit donc de donner les limites d’un intervalle. Cet intervalle contient tous les identifiants qui vous intéressent.
C’est une clause à double tranchant, si une valeur est comprise dans l’intervalle la mise à jour de l’enregistrement aura lieu. Il faut donc bien faire attention aux valeurs qui ne doivent pas mise à jour, quitte à écrire des requêtes un peu plus complexes.

La version négative

Ces deux clauses ont chacune un pendant négatif, qui se construit de la même manière.
Il s’agit de NOT IN() et NOT BETWEEN.
Ces deux clauses fonctionnement exactement comme leurs versions positives, c’est juste une question de logique inversée.

En conclusion

La clause IN est utile lorsque vous avez un nombre de valeurs relativement faible ou si la liste à passer peut être créée automatiquement. La clause BETWEEN sert lorsque toutes les valeurs sont dans un intervalle bien défini.

Pour en apprendre un peu plus je vous renvoie vers la documentation officielle de MySQL : https://dev.mysql.com/doc/refman/5.7/en/comparison-operators.html#operator_between

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

La discussion continue ailleurs

URL de rétrolien : http://blog.philippe-poisse.eu/index.php?trackback/232

Fil des commentaires de ce billet