Giải thích toán tử BETWEEN trong MySQL: Cú pháp, Ví dụ và Các thực tiễn tốt nhất

1. Introduction

Một trong những yếu tố quan trọng để thực thi các truy vấn hiệu quả trong cơ sở dữ liệu MySQL là toán tử BETWEEN. Toán tử này cực kỳ hữu ích khi kiểm tra xem dữ liệu có nằm trong một phạm vi cụ thể hay không. Nó được sử dụng để chỉ định phạm vi cho số, ngày tháng và chuỗi, cho phép trích xuất dữ liệu hiệu quả trong tìm kiếm và lọc cơ sở dữ liệu. Trong bài viết này, chúng tôi sẽ giải thích chi tiết cách sử dụng toán tử BETWEEN của MySQL, các ví dụ thực tế và các lưu ý quan trọng.

2. Basic Syntax of the BETWEEN Operator

BETWEEN Operator Overview

Toán tử BETWEEN là một điều kiện được sử dụng trong mệnh đề WHERE để kiểm tra xem giá trị cột cụ thể có nằm trong phạm vi đã định hay không. Cú pháp cơ bản như sau:

SELECT column_name
FROM table_name
WHERE column_name BETWEEN start_value AND end_value;

Ví dụ, nếu một bảng lưu trữ tuổi của nhân viên, bạn có thể sử dụng toán tử này để trích xuất nhân viên trong một phạm vi tuổi cụ thể.

Negative Form: NOT BETWEEN

Nếu bạn muốn tìm kiếm các giá trị không nằm trong phạm vi đã chỉ định, hãy sử dụng dạng phủ định NOT BETWEEN.

SELECT column_name
FROM table_name
WHERE column_name NOT BETWEEN start_value AND end_value;

3. Specifying a Numeric Range

Using BETWEEN for Numeric Ranges

Toán tử BETWEEN rất tiện lợi để chỉ định phạm vi số. Ví dụ, nếu bạn muốn trích xuất dữ liệu nơi lương nhân viên nằm giữa 50.000 và 100.000, hãy viết truy vấn như sau:

SELECT employee_id, name, salary
FROM employees
WHERE salary BETWEEN 50000 AND 100000;

Sample Data:

employee_idnamesalary
1Sato45000
2Suzuki55000
3Takahashi75000
4Tanaka120000

Execution Result:

employee_idnamesalary
2Suzuki55000
3Takahashi75000

Trong truy vấn trên, chỉ những nhân viên có lương nằm giữa 50.000 và 100.000 được chọn.

Difference from Comparison Operators

Nếu bạn biểu diễn điều kiện tương tự bằng toán tử so sánh, nó sẽ trông như thế này:

SELECT employee_id, name, salary
FROM employees
WHERE salary >= 50000 AND salary <= 100000;

Sử dụng BETWEEN làm cho truy vấn ngắn gọn hơn và cải thiện khả năng đọc. Đặc biệt khi liên quan đến nhiều điều kiện phạm vi, BETWEEN làm cho truy vấn dễ hiểu hơn.

4. Specifying a Date Range

Using BETWEEN with Date Data

BETWEEN cũng có thể được sử dụng để chỉ định phạm vi ngày. Ví dụ, để trích xuất các đơn hàng từ bảng orders giữa ngày 1 tháng 1 năm 2024 và ngày 31 tháng 12 năm 2024, hãy 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';

Sample Data:

order_idcustomer_idorder_date
11012024-01-15
21022024-05-30
31032025-03-01

Execution Result:

order_idcustomer_idorder_date
11012024-01-15
21022024-05-30

Như đã hiển thị ở trên, toán tử BETWEEN trích xuất dữ liệu trong phạm vi ngày đã chỉ định.

Handling Time Data

Nếu dữ liệu ngày bao gồm thời gian, cần chú ý đặc biệt. Ví dụ, nếu cột order_date là loại DATETIME và bao gồm giá trị thời gian, việc chỉ định phạm vi với BETWEEN sẽ bao gồm các bản ghi từ nửa đêm của ngày bắt đầu đến 23:59:59 của ngày kết thúc.

WHERE order_date BETWEEN '2024-01-01 00:00:00' AND '2024-12-31 23:59:59';

5. Specifying a String Range

Using BETWEEN with String Data

Toán tử BETWEEN cũng có thể được áp dụng cho dữ liệu chuỗi. Ví dụ, nếu bạn muốn tìm kiếm các sản phẩm có tên nằm giữa ‘A’ và ‘M’, hãy viết truy vấn như sau:

SELECT product_id, product_name
FROM products
WHERE product_name BETWEEN 'A' AND 'M';

Sample Data:

product_idproduct_name
1Apple
2Banana
3Mango
4Orange

Execution Result:

product_idproduct_name
1Apple
2Banana
3Mango

Alphabetical Order Considerations

Khi chỉ định phạm vi chuỗi, giả định rằng chuỗi được sắp xếp theo thứ tự bảng chữ cái. Vì cơ sở dữ liệu có thể phân biệt chữ hoa và chữ thường tùy thuộc vào cài đặt collation, cần thận trọng. Ví dụ, 'a''A' có thể được coi là các giá trị khác nhau.

6. Important Considerations When Using BETWEEN

Range Order Matters

Khi sử dụng toán tử BETWEEN, hãy cẩn thận về thứ tự của 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, truy vấn có thể trả về kết quả không mong muốn.

SELECT * FROM table_name WHERE column_name BETWEEN 100 AND 50;  -- unintended result

Ngoài ra, vì BETWEEN bao gồm cả hai giá trị biên, nên việc chọn giá trị bắt đầu và kết thúc một cách cẩn thận là rất quan trọng.

Sử dụng chỉ mục và hiệu suất

Toán tử BETWEEN nói chung có hiệu năng tương đương với các toán tử so sánh tiêu chuẩn. Tuy nhiên, để tối ưu hiệu suất truy vấn, việc tạo chỉ mục thích hợp là điều cần thiết. Khi các chỉ mục được cấu hình đúng, tốc độ thực thi truy vấn sử dụng toán tử BETWEEN sẽ được cải thiện. Ví dụ, việc tạo chỉ mục trên cột ngày cho phép các truy vấn phạm vi ngày chạy hiệu quả hơn.

7. Các truy vấn thực tế và ví dụ nâng cao

Sử dụng BETWEEN với nhiều cột

Toán tử BETWEEN cũng có thể được sử dụng kết hợp trên nhiều cột. Ví dụ, khi thực hiện tìm kiếm phạm vi bằng cách chỉ định cả giá sản phẩm và số lượng tồn kho, có thể sử dụng truy vấn 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 tìm kiếm các sản phẩm có giá nằm trong khoảng từ 1.000 đến 5.000 và số lượng tồn kho nằm trong khoảng từ 50 đến 200.

Ví dụ nâng cao NOT BETWEEN

Bằng cách sử dụng dạng phủ định NOT BETWEEN, bạn có thể trích xuất dữ liệu nằm ngoài một phạm vi nhất định. Ví dụ, để tìm kiếm các nhân viên có mức lương dưới 50.000 hoặc trên 100.000, viết truy vấn như sau:

SELECT employee_id, name, salary
FROM employees
WHERE salary NOT BETWEEN 50000 AND 100000;

Kết quả thực thi:

employee_idnamesalary
1Sato45000
4Tanaka120000

Truy vấn này lấy ra các nhân viên có mức lương không nằm trong khoảng từ 50.000 đến 100.000. Sử dụng NOT BETWEEN giúp dễ dàng trích xuất dữ liệu dựa trên các điều kiện ngược lại.

8. Ví dụ truy vấn trực quan

Để minh họa trực quan kết quả truy vấn, việc sử dụng một sơ đồ đơn giản có thể hiệu quả. Ví dụ, hình minh họa dưới đây giải thích cách hoạt động của BETWEEN:

Price range: [----- 1000 ---- 5000 -----]
Product A price: 3000 (within range)
Product B price: 6000 (outside range)

Sử dụng một sơ đồ như vậy giúp dễ dàng hiểu một cách trực quan liệu dữ liệu có nằm trong phạm vi truy vấn đã chỉ định hay không.

9. Tóm tắt

Toán tử BETWEEN là một công cụ rất hữu ích trong MySQL khi thực hiện các tìm kiếm dựa trên phạm vi. Nó có thể được áp dụng cho dữ liệu số, ngày và chuỗi, cho phép viết truy vấn một cách ngắn gọn và hiệu quả. Tuy nhiên, cần hiểu các lưu ý quan trọng như việc bao gồm các giá trị biên và việc sử dụng chỉ mục đúng cách. Khi áp dụng kiến thức này, bạn có thể tối ưu hiệu suất truy vấn cơ sở dữ liệu và trích xuất dữ liệu cần thiết một cách hiệu quả.

10. Tài liệu tham khảo

Để biết thêm chi tiết và các ví dụ sử dụng bổ sung, hãy tham khảo tài liệu chính thức của MySQL và các sách giáo trình chuyên ngành về cơ sở dữ liệu. Thực hành các truy vấn sẽ giúp bạn hiểu sâu hơn về toán tử BETWEEN.