ALL và ANY là hai mệnh đề logic trong SQL, kết quả trả về có kiểu Boolean có giá trị TRUE hoặc FALSE.
Toán tử ALL trong SQL
Toán tử ALL trong SQl có thể sử dụng để lấy toàn bộ dữ liệu của các cột của một bảng trong mệnh đề SELECT. Hoặc nó cũng có thể sử dụng để so sánh một giá trị với tất cả các giá trị trong một tập kết quả khác.
- Toán tử ALL trả về TRUE nếu tất cả các giá trị trong câu truy vấn con đáp ứng điều kiện được đưa ra. Toán tử ALL phải được đặt trước các toán tử so sánh.
- ALL có thể sử dụng với mệnh đề SELECT, WHERE, HAVING.
Syntax: SELECT ALL field_name FROM table_name WHERE condition(s);
Hoặc có thể sử dụng với WHERE và HAVING theo cú pháp sau
SELECT column_name(s) FROM table_name WHERE column_name comparison_operator ALL (SELECT column_name FROM table_name WHERE condition(s));
Ví dụ cho 2 table OrderDetail và Products
Products Table
| ProductID | ProductName | SupplierID | CategoryID | Price |
| 1 | Chais | 1 | 1 | 18 |
| 2 | Chang | 1 | 1 | 19 |
| 3 | Aniseed Syrup | 1 | 2 | 10 |
| 4 | Chef Anton’s Cajun Seaoning | 2 | 2 | 22 |
| 5 | Chef Anton’s Gumbo MIX | 2 | 2 | 21 |
| 6 | Boysenberry Spread | 3 | 2 | 25 |
| 7 | Organic Dried Pears | 3 | 7 | 30 |
| 8 | Northwoods Cranberry Sauce | 3 | 2 | 40 |
| 9 | Mishi Kobe Niku | 4 | 6 | 97 |
OrderDetail
| OrderDetailID | OrderID | ProductId | Quantity |
| 1 | 10248 | 1 | 12 |
| 2 | 10248 | 2 | 10 |
| 3 | 10248 | 3 | 15 |
| 4 | 10429 | 1 | 8 |
| 5 | 10429 | 4 | 4 |
| 6 | 10429 | 5 | 6 |
| 7 | 10250 | 3 | 5 |
| 8 | 10250 | 4 | 18 |
| 9 | 10251 | 5 | 2 |
| 10 | 10251 | 6 | 8 |
| 11 | 10252 | 7 | 9 |
| 12 | 10252 | 8 | 9 |
| 13 | 10250 | 9 | 20 |
| 14 | 10429 | 9 | 4 |
Ví dụ tìm tên của tất cả các sản phẩm trong Product
SELECT ALL ProductName FROM Products WHERE TRUE;
Output
| ProductName |
| Chais |
| Chang |
| Aniseed Syrup |
| Chef Anton’s Cajun Seaoning |
| Chef Anton’s Gumbo MIX |
| Boysenberry Spread |
| Organic Dried Pears |
| Northwoods Cranberry Sauce |
| Mishi Kobe Niku |
SELECT ProductName
FROM Products
WHERE ProductID = ALL (SELECT ProductId
FROM OrderDetails
WHERE Quantity = 6 OR Quantity = 2);
Output
| ProductName |
| Chef Anton’s Gumbo MIX |
SELECT OrderID
FROM OrderDetails
GROUP BY OrderID
HAVING max(Quantity) > ALL (SELECT avg(Quantity)
FROM OrderDetails
GROUP BY OrderID);
Output
| OrderID |
| 10248 |
| 10250 |
Toán tử ANY trong SQL
Toán tử ANY có thể dùng để so sánh một giá trị với từng giá trị trong tập dữ liệu. ANY trả về TRUE nếu có một giá trị bất kỳ trong tập dữ liệu này thỏa mãn điều kiện.
SELECT column_name(s) FROM table_name WHERE column_name comparison_operator ANY (SELECT column_name FROM table_name WHERE condition(s));
SELECT DISTINCT CategoryID
FROM Products
WHERE ProductID = ANY (SELECT ProductID
FROM OrderDetails);
Output
| CategoryID |
| 1 |
| 2 |
| 7 |
| 6 |
Tìm bất kỳ Product nào trong OrderDetail có Quantity = 9
SELECT ProductName
FROM Products
WHERE ProductID = ANY (SELECT ProductID
FROM OrderDetails
WHERE Quantity = 9);
Output
| ProductName |
| Organic Dried Pears |
| Northwoods Cranberry Sauce |
Nguồn tham khảo