1. Giới thiệu
ANY và ALL là hai toán tử trong MySQL được sử dụng để so sánh một giá trị với một tập hợp con được trả về bởi một truy vấn con (subquery). Cả hai đều được sử dụng với các toán tử so sánh như =, >, <, >=, <=, và <> để thực hiện các so sánh với nhiều giá trị.
ANY: Trả về TRUE nếu bất kỳ giá trị nào trong tập hợp con thỏa mãn điều kiện.ALL: Trả về TRUE nếu tất cả các giá trị trong tập hợp con thỏa mãn điều kiện.
Bài viết này sẽ giúp bạn hiểu rõ hơn về cách sử dụng ANY và ALL, cú pháp, và các ví dụ thực tế từ bảng dữ liệu giả định.
2. Cú pháp của ANY và ALL trong MySQL
Cú pháp của ANY:
SELECT column1, column2, ...
FROM table_name
WHERE column_name comparison_operator ANY (subquery);Cú pháp của ALL:
SELECT column1, column2, ...
FROM table_name
WHERE column_name comparison_operator ALL (subquery);comparison_operator: Các toán tử so sánh như=,>,<,>=,<=,<>.subquery: Là một truy vấn con trả về một tập hợp giá trị để so sánh vớicolumn_name.
3. Bảng dữ liệu giả định
Giả sử chúng ta có hai bảng employees và departments như sau:
Bảng employees:
| employee_id | first_name | last_name | department_id | salary |
|---|---|---|---|---|
| 1 | John | Doe | 1 | 1500000 |
| 2 | Jane | Smith | 2 | 1700000 |
| 3 | Bob | Johnson | 1 | 1300000 |
| 4 | Alice | Brown | 3 | 2000000 |
| 5 | Charlie | Green | NULL | 1800000 |
Bảng departments:
| department_id | department_name |
|---|---|
| 1 | Sales |
| 2 | Marketing |
| 3 | HR |
| 4 | IT |
4. Cách sử dụng ANY
Toán tử ANY trả về TRUE nếu bất kỳ giá trị nào trong tập hợp con thỏa mãn điều kiện.
a. Sử dụng ANY với toán tử so sánh
Ví dụ 1: Tìm các nhân viên có lương lớn hơn lương của ít nhất một nhân viên trong phòng ban "Sales"
SELECT first_name, last_name, salary
FROM employees
WHERE salary > ANY (
SELECT salary
FROM employees
WHERE department_id = 1
);Kết quả:
| first_name | last_name | salary |
|---|---|---|
| Jane | Smith | 1700000 |
| Alice | Brown | 2000000 |
| Charlie | Green | 1800000 |
Trong ví dụ này, ANY kiểm tra xem lương của nhân viên có lớn hơn bất kỳ lương nào trong phòng ban "Sales" hay không. Nếu có, nhân viên đó sẽ được trả về.
b. Sử dụng ANY với điều kiện khác
Ví dụ 2: Tìm các nhân viên có mức lương bằng với mức lương của bất kỳ nhân viên nào trong phòng ban "Marketing"
SELECT first_name, last_name, salary
FROM employees
WHERE salary = ANY (
SELECT salary
FROM employees
WHERE department_id = 2
);Kết quả:
| first_name | last_name | salary |
|---|---|---|
| Jane | Smith | 1700000 |
| Charlie | Green | 1800000 |
Trong ví dụ này, ANY kiểm tra xem lương của nhân viên có bằng với lương của bất kỳ nhân viên nào trong phòng ban "Marketing" hay không.
5. Cách sử dụng ALL
Toán tử ALL trả về TRUE nếu tất cả các giá trị trong tập hợp con thỏa mãn điều kiện.
a. Sử dụng ALL với toán tử so sánh
Ví dụ 3: Tìm tất cả các nhân viên có lương cao hơn tất cả các nhân viên trong phòng ban "Sales"
SELECT first_name, last_name, salary
FROM employees
WHERE salary > ALL (
SELECT salary
FROM employees
WHERE department_id = 1
);Kết quả:
| first_name | last_name | salary |
|---|---|---|
| Jane | Smith | 1700000 |
| Alice | Brown | 2000000 |
| Charlie | Green | 1800000 |
Trong ví dụ này, ALL kiểm tra xem lương của nhân viên có cao hơn tất cả các lương trong phòng ban "Sales" hay không. Nếu đúng, nhân viên đó sẽ được trả về.
b. Sử dụng ALL với các điều kiện khác
Ví dụ 4: Tìm tất cả các nhân viên có mức lương nhỏ hơn mức lương của tất cả các nhân viên trong phòng ban "HR"
SELECT first_name, last_name, salary
FROM employees
WHERE salary < ALL (
SELECT salary
FROM employees
WHERE department_id = 3
);Kết quả:
| first_name | last_name | salary |
|---|---|---|
| John | Doe | 1500000 |
| Bob | Johnson | 1300000 |
| Jane | Smith | 1700000 |
| Charlie | Green | 1800000 |
Trong ví dụ này, ALL kiểm tra xem lương của nhân viên có thấp hơn tất cả các lương trong phòng ban "HR" hay không. Nếu đúng, nhân viên đó sẽ được trả về.
6. Các ví dụ thực tế khác về ANY và ALL trong MySQL
Ví dụ 1: Tìm các nhân viên có lương lớn hơn ít nhất một nhân viên trong phòng ban "Marketing"
SELECT first_name, last_name, salary
FROM employees
WHERE salary > ANY (
SELECT salary
FROM employees
WHERE department_id = 2
);Ví dụ 2: Tìm các nhân viên có lương nhỏ hơn lương của tất cả các nhân viên trong phòng ban "HR"
SELECT first_name, last_name, salary
FROM employees
WHERE salary < ALL (
SELECT salary
FROM employees
WHERE department_id = 3
);Ví dụ 3: Tìm các nhân viên có lương bằng với bất kỳ lương nào trong phòng ban "Sales"
SELECT first_name, last_name, salary
FROM employees
WHERE salary = ANY (
SELECT salary
FROM employees
WHERE department_id = 1
);Ví dụ 4: Tìm các nhân viên có lương cao hơn tất cả các nhân viên trong phòng ban "Marketing"
SELECT first_name, last_name, salary
FROM employees
WHERE salary > ALL (
SELECT salary
FROM employees
WHERE department_id = 2
);7. Một số lưu ý khi sử dụng ANY và ALL trong MySQL
a. Sử dụng ANY khi chỉ cần thỏa mãn một điều kiện
Toán tử ANY rất hữu ích khi bạn chỉ cần kiểm tra xem một giá trị có lớn hơn hoặc nhỏ hơn bất kỳ giá trị nào trong tập hợp con. Điều này giúp bạn tìm ra các giá trị mà không cần tất cả các giá trị trong tập hợp con phải thỏa mãn điều kiện.
b. Sử dụng ALL khi cần thỏa mãn tất cả các điều kiện
Toán tử ALL yêu cầu tất cả các giá trị trong tập hợp con phải thỏa mãn điều kiện. Điều này phù hợp khi bạn cần so sánh một giá trị với tất cả các giá trị trong tập hợp con.
c. Kết hợp với các hàm tổng hợp
Cả ANY và ALL đều có thể kết hợp với các hàm tổng hợp (như SUM(), AVG()) để thực hiện các so sánh phức tạp hơn.
Kết luận
ANY và ALL là các toán tử mạnh mẽ được sử dụng để thực hiện các phép so sánh phức tạp với một tập hợp con được trả về bởi truy vấn con. Trong khi ANY trả về TRUE nếu bất kỳ giá trị nào trong tập hợp thỏa mãn điều kiện, thì ALL yêu cầu tất cả các giá trị trong tập hợp phải thỏa mãn điều kiện.
Hãy thử áp dụng các ví dụ này trong các bài tập và dự án thực tế trên CodeTutHub để thành thạo hơn về cách sử dụng ANY và ALL trong MySQL!








