In SQL, il BETWEEN operatore consente di verificare i valori che rientrano in un determinato intervallo.
Il BETWEEN l'operatore specifica un intervallo da testare e restituisce TRUE quando l'operando rientra nell'intervallo dei confronti.
Tabella delle sorgenti
La tabella seguente viene utilizzata per gli esempi in questa pagina.
SELECT * FROM Pets; Risultato:
+---------+-------------+-----------+-----------+------------+ | 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)
Esempio
Ecco un semplice esempio per dimostrare il BETWEEN operatore.
SELECT * FROM Pets
WHERE DOB BETWEEN '2018-10-01' AND '2020-09-17'; Risultato:
+---------+-------------+-----------+-----------+------------+ | 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 questo esempio, abbiamo restituito tutte le righe in cui DOB la colonna era compresa tra 2018-10-01 e 2020-09-17 .
In questo caso, quattro righe corrispondevano a quel criterio e, pertanto, sono state restituite quattro righe.
BETWEEN è inclusivo
Il BETWEEN operatore. è inclusivo. Cioè, include i valori a ciascuna estremità dell'intervallo. Se guardi i risultati nell'esempio precedente, vedrai che ci sono valori su entrambe le estremità che corrispondono esattamente alle date che abbiamo fornito.
È come usare l'operatore maggiore o uguale a (>= ) combinato con l'operatore minore o uguale a (<= ).
SELECT * FROM Pets
WHERE DOB >= '2018-10-01' AND DOB <= '2020-09-17'; Risultato:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
Per renderlo un intervallo esclusivo, usa il maggiore di (> ) operatore e minore di (< ) operatore.
SELECT * FROM Pets
WHERE DOB > '2018-10-01' AND DOB < '2020-09-17'; Risultato:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 2 | 3 | 3 | Fetch | 2019-08-16 | | 4 | 3 | 3 | Wag | 2020-03-15 | +---------+-------------+-----------+-----------+------------+
Se devi usare il BETWEEN operatore, dovrai restringere l'intervallo di conseguenza.
In questo modo:
SELECT * FROM Pets
WHERE DOB BETWEEN '2018-10-02' AND '2020-09-16'; Risultato:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 2 | 3 | 3 | Fetch | 2019-08-16 | | 4 | 3 | 3 | Wag | 2020-03-15 | +---------+-------------+-----------+-----------+------------+
Utilizzo di valori numerici
Gli esempi precedenti utilizzano le date, ma non sei limitato alle sole date. Ecco un esempio che utilizza valori numerici.
SELECT * FROM Pets
WHERE OwnerId BETWEEN 2 AND 3; Risultato:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
Utilizzo di valori stringa
Potremmo fare un ulteriore passo avanti e utilizzare BETWEEN per confrontare due colonne di stringhe.
SELECT * FROM Pets
WHERE PetName BETWEEN 'Meow' AND 'Wag'
ORDER BY PetName; Risultato:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
Devi stare attento però. Potresti pensare che potremmo usare solo la lettera iniziale, in questo modo:
SELECT * FROM Pets
WHERE PetName BETWEEN 'M' AND 'W'
ORDER BY PetName; Ma questo risulterà in questo:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 8 | 2 | 4 | Meow | NULL | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 5 | 1 | 1 | Tweet | 2020-11-28 | +---------+-------------+-----------+-----------+------------+
Non includeva Wag come ha fatto la query precedente. Questo perché BETWEEN guarda l'intera stringa. In tal caso, Wag è maggiore di W , e quindi non è incluso nei risultati.