Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Viết một truy vấn MySQL duy nhất hiển thị giá trị cho nhiều đầu vào bằng BETWEEN

Để lọc hàng có giá trị cột nằm trong **khoảng liên tục** (ví dụ: ID từ 3 đến 6), dùng toán tử BETWEEN – ngắn gọn và tối ưu hơn nhiều so với OR hoặc IN liệt kê từng giá trị.

Cú pháp

SELECT cot_1, cot_2
FROM ten_bang
WHERE cot_khoa BETWEEN gia_tri_dau AND gia_tri_cuoi;
  • Tương đương: cot_khoa >= gia_tri_dau AND cot_khoa <= gia_tri_cuoi.
  • Đã bao gồm **cả hai đầu** (inclusive).
  • Dùng được cho số, ngày, chuỗi (so sánh theo collation).

Ví dụ minh họa

Tạo bảng sinh viên (ID 1-7):

mysql> CREATE TABLE DemoTable1537 (
    -> StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> StudentName VARCHAR(20)
    -> );
mysql> INSERT INTO DemoTable1537(StudentName) VALUES
    -> ('Chris'),('Bob'),('Sam'),('Mike'),('David'),('John'),('Carol');

Truy vấn sinh viên ID từ 3 đến 6:

mysql> SELECT StudentName FROM DemoTable1537 WHERE StudentId BETWEEN 3 AND 6;

Kết quả:

+-------------+
| StudentName |
+-------------+
| Sam         |
| Mike        |
| David       |
| John        |
+-------------+

Lưu ý quan trọng

  • Thứ tự: BETWEEN low AND high – low phải ≤ high. Nếu low > high → kết quả rỗng (không báo lỗi).
  • Kiểu dữ liệu: Đảm bảo cột và giá trị so sánh cùng kiểu (số so số, ngày so ngày). Tránh so sánh chuỗi với số.
  • Index: BETWEEN trên cột có index → **Index Range Scan** (rất nhanh).
  • NULL: Nếu cột có NULL, hàng NULL **không** được chọn (NULL không so sánh được).

Mở rộng: NOT BETWEEN

SELECT * FROM bang WHERE cot NOT BETWEEN 3 AND 6; -- Lấy ID <3 HOẶC >6

So sánh với IN

  • IN (3,4,5,6): tương đương nhưng chỉ dùng cho tập giá trị **rời rạc**.
  • BETWEEN 3 AND 6: cho **khoảng liên tục** – optimizer hiểu tốt hơn cho range scan.