Tags:

Mệnh đề ALL và ANY trong SQL

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

Tìm tên của sản phẩm nếu tất cả các bản ghi trong OrderDetails có Quantity bằng 6 hoặc 2
SELECT ProductName 
FROM Products
WHERE ProductID = ALL (SELECT ProductId
                       FROM OrderDetails
                       WHERE Quantity = 6 OR Quantity = 2);

Output

ProductName
Chef Anton’s Gumbo MIX
 
Nhóm các dữ liệu trong OrderDetail theo OrderID và tìm ra OrderID có Quantity lớn nhất.(1)
Nhóm các dữ liệu trong OrderDetail theo Orderid và lấy ra trung bình cộng của Quantity.(2)
(1) phải lớn hơn tất cả dữ liệu trong (2);
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

https://www.geeksforgeeks.org/sql-all-and-any/

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x