En SQL, le BETWEEN
L'opérateur vous permet de vérifier les valeurs comprises dans une plage donnée.
Le BETWEEN
L'opérateur spécifie une plage à tester et renvoie TRUE
lorsque l'opérande se trouve dans la plage de comparaisons.
Tableau des sources
Le tableau suivant est utilisé pour les exemples sur cette page.
SELECT * FROM Pets;
Résultat :
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +---------+-------------+-----------+-----------+------------+ (8 rows affected)
Exemple
Voici un exemple simple pour démontrer le BETWEEN
opérateur.
SELECT * FROM Pets
WHERE DOB BETWEEN '2018-10-01' AND '2020-09-17';
Résultat :
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | +---------+-------------+-----------+-----------+------------+
Dans cet exemple, nous avons renvoyé toutes les lignes où le DOB
colonne était entre 2018-10-01
et 2020-09-17
.
Dans ce cas, quatre lignes correspondaient à ce critère et, par conséquent, quatre lignes ont été renvoyées.
ENTRE est inclusif
Le BETWEEN
opérateur. est inclusif. Autrement dit, il inclut les valeurs à chaque extrémité de la plage. Si vous regardez les résultats de l'exemple précédent, vous verrez qu'il y a des valeurs aux deux extrémités qui correspondent exactement aux dates que nous avons fournies.
C'est la même chose que d'utiliser l'opérateur supérieur ou égal à (>=
) combiné avec l'opérateur inférieur ou égal à (<=
).
SELECT * FROM Pets
WHERE DOB >= '2018-10-01' AND DOB <= '2020-09-17';
Résultat :
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | +---------+-------------+-----------+-----------+------------+
Pour en faire une plage exclusive, utilisez le supérieur à (>
) opérateur et inférieur à (<
) opérateur.
SELECT * FROM Pets
WHERE DOB > '2018-10-01' AND DOB < '2020-09-17';
Résultat :
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 2 | 3 | 3 | Fetch | 2019-08-16 | | 4 | 3 | 3 | Wag | 2020-03-15 | +---------+-------------+-----------+-----------+------------+
Si vous devez utiliser le BETWEEN
opérateur, vous devrez réduire la plage en conséquence.
Comme ceci :
SELECT * FROM Pets
WHERE DOB BETWEEN '2018-10-02' AND '2020-09-16';
Résultat :
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 2 | 3 | 3 | Fetch | 2019-08-16 | | 4 | 3 | 3 | Wag | 2020-03-15 | +---------+-------------+-----------+-----------+------------+
Utiliser des valeurs numériques
Les exemples précédents utilisent des dates, mais vous n'êtes pas limité aux dates. Voici un exemple qui utilise des valeurs numériques.
SELECT * FROM Pets
WHERE OwnerId BETWEEN 2 AND 3;
Résultat :
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 7 | 3 | 2 | Bark | NULL | +---------+-------------+-----------+-----------+------------+
Utiliser des valeurs de chaîne
Nous pourrions aller plus loin et utiliser BETWEEN
pour comparer deux colonnes de chaîne.
SELECT * FROM Pets
WHERE PetName BETWEEN 'Meow' AND 'Wag'
ORDER BY PetName;
Résultat :
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 8 | 2 | 4 | Meow | NULL | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 4 | 3 | 3 | Wag | 2020-03-15 | +---------+-------------+-----------+-----------+------------+
Vous devez cependant être prudent. Vous pourriez penser que nous pourrions simplement utiliser la lettre initiale, comme ceci :
SELECT * FROM Pets
WHERE PetName BETWEEN 'M' AND 'W'
ORDER BY PetName;
Mais cela se traduira par ceci :
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 8 | 2 | 4 | Meow | NULL | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 5 | 1 | 1 | Tweet | 2020-11-28 | +---------+-------------+-----------+-----------+------------+
Il n'incluait pas Wag
comme la requête précédente l'a fait. C'est parce que BETWEEN
regarde toute la chaîne. Dans ce cas, Wag
est supérieur à W
, et donc il n'est pas inclus dans les résultats.