In SQL is de BETWEEN
operator stelt u in staat om te controleren op waarden die binnen een bepaald bereik vallen.
De BETWEEN
operator specificeert een bereik om te testen, en retourneert TRUE
wanneer de operand binnen het vergelijkingsbereik valt.
Brontabel
De volgende tabel wordt gebruikt voor de voorbeelden op deze pagina.
SELECT * FROM Pets;
Resultaat:
+---------+-------------+-----------+-----------+------------+ | 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)
Voorbeeld
Hier is een eenvoudig voorbeeld om de BETWEEN
. te demonstreren telefoniste.
SELECT * FROM Pets
WHERE DOB BETWEEN '2018-10-01' AND '2020-09-17';
Resultaat:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
In dit voorbeeld hebben we alle rijen geretourneerd waar de DOB
kolom was tussen 2018-10-01
en 2020-09-17
.
In dit geval kwamen vier rijen overeen met die criteria en daarom werden er vier rijen geretourneerd.
TUSSEN is inclusief
De BETWEEN
exploitant. is inclusief. Dat wil zeggen, het bevat de waarden aan elk uiteinde van het bereik. Als u naar de resultaten in het vorige voorbeeld kijkt, ziet u dat er aan beide uiteinden waarden zijn die exact overeenkomen met de datums die we hebben opgegeven.
Het is hetzelfde als het gebruik van de operator groter dan of gelijk aan (>=
) gecombineerd met de operator kleiner dan of gelijk aan (<=
).
SELECT * FROM Pets
WHERE DOB >= '2018-10-01' AND DOB <= '2020-09-17';
Resultaat:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
Om er een exclusief bereik van te maken, gebruikt u de groter dan (>
) operator en kleiner dan (<
) operator.
SELECT * FROM Pets
WHERE DOB > '2018-10-01' AND DOB < '2020-09-17';
Resultaat:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 2 | 3 | 3 | Fetch | 2019-08-16 | | 4 | 3 | 3 | Wag | 2020-03-15 | +---------+-------------+-----------+-----------+------------+
Als u de BETWEEN
. moet gebruiken operator, moet u het bereik dienovereenkomstig verkleinen.
Zoals dit:
SELECT * FROM Pets
WHERE DOB BETWEEN '2018-10-02' AND '2020-09-16';
Resultaat:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 2 | 3 | 3 | Fetch | 2019-08-16 | | 4 | 3 | 3 | Wag | 2020-03-15 | +---------+-------------+-----------+-----------+------------+
Numerieke waarden gebruiken
De vorige voorbeelden gebruiken datums, maar u bent niet beperkt tot alleen datums. Hier is een voorbeeld dat numerieke waarden gebruikt.
SELECT * FROM Pets
WHERE OwnerId BETWEEN 2 AND 3;
Resultaat:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
Tekenreekswaarden gebruiken
We kunnen nog een stap verder gaan en BETWEEN
. gebruiken om twee tekenreekskolommen te vergelijken.
SELECT * FROM Pets
WHERE PetName BETWEEN 'Meow' AND 'Wag'
ORDER BY PetName;
Resultaat:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
Je moet wel voorzichtig zijn. Je zou denken dat we gewoon de eerste letter kunnen gebruiken, zoals deze:
SELECT * FROM Pets
WHERE PetName BETWEEN 'M' AND 'W'
ORDER BY PetName;
Maar dat resulteert in dit:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 8 | 2 | 4 | Meow | NULL | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 5 | 1 | 1 | Tweet | 2020-11-28 | +---------+-------------+-----------+-----------+------------+
Het bevatte geen Wag
zoals de vorige vraag deed. Dat komt omdat BETWEEN
kijkt naar de hele snaar. In dat geval Wag
is groter dan W
, en is dus niet opgenomen in de resultaten.