Trong SQL, BETWEEN
toán tử cho phép bạn kiểm tra các giá trị nằm trong một phạm vi nhất định.
BETWEEN
toán tử chỉ định một phạm vi để kiểm tra và nó trả về TRUE
khi toán hạng nằm trong phạm vi so sánh.
Bảng nguồn
Bảng sau được sử dụng cho các ví dụ trên trang này.
SELECT * FROM Pets;
Kết quả:
+---------+-------------+-----------+-----------+------------+ | 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)
Ví dụ
Dưới đây là một ví dụ đơn giản để chứng minh BETWEEN
nhà điều hành.
SELECT * FROM Pets
WHERE DOB BETWEEN '2018-10-01' AND '2020-09-17';
Kết quả:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
Trong ví dụ này, chúng tôi trả về tất cả các hàng có DOB
cột nằm trong khoảng từ 2018-10-01
và 2020-09-17
.
Trong trường hợp này, bốn hàng phù hợp với tiêu chí đó và do đó, bốn hàng đã được trả về.
GIỮA là Bao gồm
BETWEEN
nhà điều hành. là bao gồm. Nghĩa là, nó bao gồm các giá trị ở mỗi đầu của phạm vi. Nếu bạn nhìn vào kết quả trong ví dụ trước, bạn sẽ thấy rằng có các giá trị ở cả hai đầu khớp chính xác với ngày chúng tôi đã cung cấp.
Điều này cũng giống như việc sử dụng toán tử lớn hơn hoặc bằng với (>=
) được kết hợp với toán tử nhỏ hơn hoặc bằng với (<=
).
SELECT * FROM Pets
WHERE DOB >= '2018-10-01' AND DOB <= '2020-09-17';
Kết quả:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
Để biến nó thành một phạm vi độc quyền, hãy sử dụng giá trị lớn hơn (>
) và nhỏ hơn (<
) toán tử.
SELECT * FROM Pets
WHERE DOB > '2018-10-01' AND DOB < '2020-09-17';
Kết quả:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 2 | 3 | 3 | Fetch | 2019-08-16 | | 4 | 3 | 3 | Wag | 2020-03-15 | +---------+-------------+-----------+-----------+------------+
Nếu bạn phải sử dụng BETWEEN
, bạn sẽ cần thu hẹp phạm vi cho phù hợp.
Như thế này:
SELECT * FROM Pets
WHERE DOB BETWEEN '2018-10-02' AND '2020-09-16';
Kết quả:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 2 | 3 | 3 | Fetch | 2019-08-16 | | 4 | 3 | 3 | Wag | 2020-03-15 | +---------+-------------+-----------+-----------+------------+
Sử dụng giá trị số
Các ví dụ trước sử dụng ngày tháng, nhưng bạn không chỉ giới hạn ở ngày tháng. Dưới đây là một ví dụ sử dụng giá trị số.
SELECT * FROM Pets
WHERE OwnerId BETWEEN 2 AND 3;
Kết quả:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
Sử dụng giá trị chuỗi
Chúng tôi có thể tiến thêm một bước nữa và sử dụng BETWEEN
để so sánh hai cột chuỗi.
SELECT * FROM Pets
WHERE PetName BETWEEN 'Meow' AND 'Wag'
ORDER BY PetName;
Kết quả:
+---------+-------------+-----------+-----------+------------+ | 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 | +---------+-------------+-----------+-----------+------------+
Bạn cần phải cẩn thận. Bạn có thể nghĩ rằng chúng ta chỉ có thể sử dụng chữ cái đầu tiên, như sau:
SELECT * FROM Pets
WHERE PetName BETWEEN 'M' AND 'W'
ORDER BY PetName;
Nhưng điều đó sẽ dẫn đến điều này:
+---------+-------------+-----------+-----------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | |---------+-------------+-----------+-----------+------------| | 8 | 2 | 4 | Meow | NULL | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 5 | 1 | 1 | Tweet | 2020-11-28 | +---------+-------------+-----------+-----------+------------+
Nó không bao gồm Wag
giống như truy vấn trước đó đã làm. Đó là bởi vì BETWEEN
nhìn vào toàn bộ chuỗi. Trong trường hợp đó, Wag
lớn hơn W
và vì vậy nó không được đưa vào kết quả.