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.