1. Giới thiệu
Một trong những yếu tố quan trọng để thực thi truy vấn hiệu quả trong cơ sở dữ liệu MySQL là toán tử BETWEEN
. Toán tử này rất hữu ích khi cần kiểm tra xem dữ liệu có nằm trong một phạm vi nhất định hay không. Nó được sử dụng để chỉ định phạm vi số, ngày tháng hoặc chuỗi ký tự, giúp việc tìm kiếm và lọc dữ liệu trong cơ sở dữ liệu trở nên nhanh chóng và hiệu quả. Bài viết này sẽ giải thích chi tiết cách sử dụng toán tử BETWEEN
trong MySQL, các ví dụ thực tế cũng như những điểm cần lưu ý.
2. Cú pháp cơ bản của toán tử BETWEEN
Toán tử BETWEEN
là gì
Toán tử BETWEEN
là một điều kiện được sử dụng trong mệnh đề WHERE
, dùng để kiểm tra xem giá trị của một cột có nằm trong phạm vi được chỉ định hay không. Cú pháp cơ bản như sau:
SELECT tên_cột
FROM tên_bảng
WHERE tên_cột BETWEEN giá_trị_bắt_đầu AND giá_trị_kết_thúc;
Ví dụ, khi một bảng lưu trữ độ tuổi của nhân viên, bạn có thể dùng toán tử này để trích xuất các nhân viên thuộc một độ tuổi cụ thể.
Dạng phủ định NOT BETWEEN
Nếu muốn tìm các giá trị nằm ngoài phạm vi chỉ định, bạn có thể sử dụng dạng phủ định NOT BETWEEN
.
SELECT tên_cột
FROM tên_bảng
WHERE tên_cột NOT BETWEEN giá_trị_bắt_đầu AND giá_trị_kết_thúc;
3. Chỉ định phạm vi số
Cách sử dụng BETWEEN
với số
Toán tử BETWEEN
rất tiện lợi khi áp dụng cho phạm vi số. Ví dụ, nếu muốn trích xuất dữ liệu nhân viên có mức lương nằm trong khoảng từ 50.000 đến 100.000, bạn có thể viết truy vấn như sau:
SELECT employee_id, name, salary
FROM employees
WHERE salary BETWEEN 50000 AND 100000;
4. Chỉ định phạm vi ngày
Cách sử dụng BETWEEN
với dữ liệu ngày
BETWEEN
cũng có thể được dùng cho phạm vi ngày. Ví dụ, để trích xuất các đơn hàng từ ngày 01/01/2024 đến 31/12/2024 trong bảng đơn hàng, bạn có thể viết truy vấn như sau:
SELECT order_id, customer_id, order_date
FROM orders
WHERE order_date BETWEEN '2024-01-01' AND '2024-12-31';
Dữ liệu mẫu:
order_id | customer_id | order_date |
---|---|---|
1 | 101 | 2024-01-15 |
2 | 102 | 2024-05-30 |
3 | 103 | 2025-03-01 |
Kết quả:
order_id | customer_id | order_date |
---|---|---|
1 | 101 | 2024-01-15 |
2 | 102 | 2024-05-30 |
Như vậy, toán tử BETWEEN
sẽ trích xuất dữ liệu nằm trong phạm vi ngày được chỉ định.
Xử lý dữ liệu có thời gian
Khi dữ liệu ngày có bao gồm cả thời gian, bạn cần chú ý. Ví dụ, nếu cột order_date
có kiểu DATETIME
, thì khi dùng BETWEEN
, phạm vi sẽ bao gồm từ 0 giờ của ngày bắt đầu đến 0 giờ của ngày kết thúc tiếp theo.
WHERE order_date BETWEEN '2024-01-01 00:00:00' AND '2024-12-31 23:59:59';
5. Chỉ định phạm vi chuỗi ký tự
Cách sử dụng BETWEEN
với dữ liệu chuỗi
Toán tử BETWEEN
cũng áp dụng được cho dữ liệu chuỗi. Ví dụ, nếu muốn tìm các sản phẩm có tên nằm trong khoảng từ ‘A’ đến ‘M’, bạn có thể viết truy vấn như sau:
SELECT product_id, product_name
FROM products
WHERE product_name BETWEEN 'A' AND 'M';
Dữ liệu mẫu:
product_id | product_name |
---|---|
1 | Apple |
2 | Banana |
3 | Mango |
4 | Orange |
Kết quả:
product_id | product_name |
---|---|
1 | Apple |
2 | Banana |
3 | Mango |
Lưu ý về thứ tự chữ cái
Khi chỉ định phạm vi chuỗi, cần lưu ý rằng dữ liệu được sắp xếp theo thứ tự bảng chữ cái. Ngoài ra, trong một số cài đặt cơ sở dữ liệu, chữ hoa và chữ thường được phân biệt, ví dụ 'a'
và 'A'
có thể được coi là khác nhau.
6. Lưu ý khi sử dụng toán tử BETWEEN
Lưu ý khi chỉ định phạm vi
Khi sử dụng toán tử BETWEEN
, cần chú ý đến thứ tự giá trị bắt đầu và giá trị kết thúc. Nếu giá trị bắt đầu lớn hơn giá trị kết thúc, kết quả có thể không như mong muốn.
SELECT * FROM table_name WHERE column_name BETWEEN 100 AND 50; -- Kết quả không mong muốn
Hơn nữa, BETWEEN
bao gồm cả hai giá trị biên (bắt đầu và kết thúc), do đó cần chọn giá trị cẩn thận để tránh sai sót.
Sử dụng chỉ mục và hiệu suất
Toán tử BETWEEN
có hiệu suất tương tự như các toán tử so sánh thông thường. Tuy nhiên, để tối ưu hiệu suất truy vấn, cần thiết lập chỉ mục (index) phù hợp. Nếu cột có chỉ mục, truy vấn sử dụng BETWEEN
sẽ được thực thi nhanh hơn. Ví dụ, thiết lập chỉ mục trên cột ngày sẽ giúp truy vấn phạm vi ngày chạy hiệu quả hơn.
7. Truy vấn thực tế và ví dụ ứng dụng
Sử dụng BETWEEN với nhiều cột
Toán tử BETWEEN
cũng có thể được kết hợp với nhiều cột. Ví dụ, nếu muốn lọc sản phẩm theo cả giá và số lượng tồn kho, bạn có thể viết truy vấn như sau:
SELECT product_name, price, stock
FROM products
WHERE price BETWEEN 1000 AND 5000
AND stock BETWEEN 50 AND 200;
Truy vấn này sẽ tìm các sản phẩm có giá từ 1000 đến 5000 và số lượng tồn kho từ 50 đến 200.
Ví dụ ứng dụng NOT BETWEEN
Bằng cách sử dụng NOT BETWEEN
, bạn có thể trích xuất dữ liệu nằm ngoài phạm vi. Ví dụ, để tìm nhân viên có mức lương dưới 50.000 hoặc trên 100.000, bạn có thể viết:
SELECT employee_id, name, salary
FROM employees
WHERE salary NOT BETWEEN 50000 AND 100000;
Kết quả:
employee_id | name | salary |
---|---|---|
1 | 佐藤 | 45000 |
4 | 田中 | 120000 |
Truy vấn này sẽ trả về những nhân viên không thuộc khoảng 50.000 đến 100.000. Việc dùng NOT BETWEEN
giúp dễ dàng trích xuất dữ liệu theo điều kiện ngược lại.
8. Ví dụ trực quan của truy vấn
Để minh họa kết quả truy vấn một cách trực quan, có thể dùng sơ đồ đơn giản như sau:
Khoảng giá: [----- 1000 ---- 5000 -----]
Giá sản phẩm A: 3000 (Trong khoảng)
Giá sản phẩm B: 6000 (Ngoài khoảng)
Cách biểu diễn này giúp dễ dàng hiểu được dữ liệu nào nằm trong phạm vi chỉ định.
9. Kết luận
Toán tử BETWEEN
trong MySQL là một công cụ mạnh mẽ để tìm kiếm dữ liệu trong phạm vi xác định. Nó có thể áp dụng cho số, ngày tháng và chuỗi ký tự, giúp câu lệnh truy vấn ngắn gọn và hiệu quả hơn. Tuy nhiên, cần chú ý rằng nó bao gồm cả hai giá trị biên, cũng như cân nhắc việc sử dụng chỉ mục để cải thiện hiệu suất. Hiểu và áp dụng đúng BETWEEN
sẽ giúp tối ưu hóa truy vấn và trích xuất dữ liệu chính xác, hiệu quả.
10. Tài liệu tham khảo
Để tìm hiểu chi tiết hơn, bạn có thể tham khảo tài liệu chính thức của MySQL hoặc các sách chuyên sâu về cơ sở dữ liệu. Ngoài ra, việc thực hành trực tiếp các truy vấn sẽ giúp bạn nắm vững cách hoạt động của toán tử BETWEEN
.