Filtrer une plage de valeurs ou de dates
Objectif : Retenir les emprunts dont une valeur ou une date se situe dans un intervalle inclusif.
Vous cherchez parfois les emprunts effectués pendant une période précise, ou les retards dont le nombre de jours se situe dans une plage donnée. Deux conditions séparées peuvent exprimer ces bornes, mais BETWEEN permet de les réunir dans une écriture compacte. Dans cette leçon, vous allez l’utiliser sur des dates et sur une valeur numérique du schéma de la médiathèque.
Écrire un intervalle avec BETWEEN
La forme générale est colonne BETWEEN borne_basse AND borne_haute. Elle retient les lignes pour lesquelles la valeur de la colonne est supérieure ou égale à la borne basse et inférieure ou égale à la borne haute. Les deux bornes sont donc incluses : une date égale au premier ou au dernier jour de la période est conservée.
Les requêtes ci-dessous supposent que le fichier de schéma et les données de la médiathèque sont chargés dans MariaDB 11. Vous connaissez déjà les tables et les colonnes grâce à la leçon « Se repérer dans les tables de la médiathèque » ; ici, concentrez-vous sur la définition des deux bornes.
-- Emprunts effectués pendant le premier semestre 2024
SELECT id_emprunt, id_adherent, date_emprunt
FROM emprunts
WHERE date_emprunt BETWEEN '2024-01-01' AND '2024-06-30';Le résultat contient les emprunts dont date_emprunt est comprise entre le 1er janvier et le 30 juin 2024 inclus.Les dates sont écrites au format ISO AAAA-MM-JJ, entre apostrophes. Comme date_emprunt est une date, la borne de fin '2024-06-30' inclut cette journée. Si aucune ligne ne correspond dans les données chargées, le résultat est simplement vide ; la requête reste valide.
Appliquer BETWEEN à une valeur numérique
Le même opérateur s’applique à des nombres. La table retards contient notamment jours_retard et frais ; vous pouvez donc demander les retards qui durent de trois à sept jours, en incluant les valeurs 3 et 7.
-- Retards d'une durée comprise entre 3 et 7 jours inclus
SELECT id_retard, id_emprunt, jours_retard, frais
FROM retards
WHERE jours_retard BETWEEN 3 AND 7;Le résultat ne contient que les retards dont jours_retard vaut 3, 4, 5, 6 ou 7.Vérifier les limites de la période
Choisissez les bornes d’après la question posée, et non d’après les premières lignes visibles dans un résultat. Pour une année civile, indiquez le premier jour de janvier et le dernier jour de décembre. Si vous cherchez une période qui traverse deux années, inscrivez les dates de début et de fin exactes plutôt que de vous fier à une notation abrégée.
Pour une colonne de type date, les bornes représentent des journées entières. Si votre schéma utilise un type qui stocke aussi l’heure, une borne de fin écrite comme une date peut ne pas couvrir toute cette journée : vérifiez alors le type réel de la colonne et définissez une borne adaptée. Dans le schéma de cette leçon, date_emprunt est présentée comme une date.
Ajoutez ces requêtes commentées à la suite du contenu existant de requetes.sql. Elles illustrent chacune un besoin distinct : rechercher une période de dates, puis isoler une plage de valeurs numériques. Gardez les bornes explicites dans les commentaires afin que le fichier reste compréhensible lorsqu’il sera relu.
À retenir
- Écrivez l’intervalle sous la forme colonne BETWEEN borne_basse AND borne_haute.
- Les bornes basse et haute sont incluses dans le résultat.
- BETWEEN fonctionne avec des dates comme avec des valeurs numériques.
- Choisissez des bornes cohérentes avec le type de la colonne et la période recherchée.
- Ajoutez les requêtes commentées à la suite de requetes.sql.