본문으로 바로가기

MySQL ANY/ALL

category 데이터베이스/MySQL 2018. 12. 24. 21:55

MySQL ANY/ALL

 

Any 와 All 연산자에 대해 알아볼게요.

 

Any는 어느 것 중 하나 All은 모든 것.

 

즉 Any는 하위 쿼리에서 하나의 조건 만 만족하면 True!!

All은 하위 쿼리에서 모든 값이 조건 만족하면 True!!

 

 

Any

SELECT column_name(s)
FROM table_name
WHERE column_name operator ANY
(SELECT column_name FROM table_name WHERE condition);

All

SELECT column_name(s)
FROM table_name
WHERE column_name operator ALL
(SELECT column_name FROM table_name WHERE condition);

이런 구문형태로 쓰이게 됩니다.

 

여기서 operator는 연산자로 =/<>=/>/>=/</<=! 등이 쓰입니다.

 

예를 들어볼게요.

ProductID ProductName SupplierID CategoryID Unit Price
1 Chais 1 1 10 boxes x 20 bags 18
2 Chang 1 1 24 - 12 oz bottles 19
3 Aniseed Syrup 1 2 12 - 550 ml bottles 10
4 Chef Anton's Cajun Seasoning 2 2 48 - 6 oz jars 22
5 Chef Anton's Gumbo Mix 2 2 36 boxes 21.35

 

OrderDetailID OrderID ProductID Quantity
1 10248 11 12
2 10248 42 10
3 10248 72 5
4 10249 14 9
5 10249 51 40

이러한 두 개의 테이블이 있다고 치면

 

우선 ANY에 대해 구문을  써보면

 

SELECT ProductName
FROM Products
WHERE ProductID = ANY (SELECT ProductID FROM OrderDetails WHERE Quantity = 10);

 

여기서 WHERE절에 SELECT절이 있습니다.

 

이 SELECT절을 위 테이블 참조하여 한번 보시면 Quantity가 10인

 

OrderDetails 테이블에서 ProductID가 존재하지 않습니까?

 

어느 하나라도 만족하므로 True를 반환합니다.

 

따라서 이 WHERE이 성립이 되어 ProductID가 42인 Products 테이블에서 ProductName을 뽑아줍니다.

 

그 다음 ALL에 대해 구문을 써보면

SELECT ProductName
FROM Products
WHERE ProductID = ALL (SELECT ProductID FROM OrderDetails WHERE Quantity = 10);

 

여기서 WHERE절에 SELECT구문이 마찬가지로 있는데 ALL에 대해서는 해석이 모든 레코드가 Quantity가 10이면 True를 반환한다는 뜻입니다. 즉 위 테이블에서는 모든 레코드가 10이지 않지요..?? 그래서 FALSE를 반환하여 결과는 아무것도 출력하지 않게 됩니다.

 

 

 

'데이터베이스 > MySQL' 카테고리의 다른 글

MySQL INSERT INTO SELECT  (0) 2018.12.27
MySQL 테이블 복사  (0) 2018.12.24
MySQL EXISTS  (0) 2018.12.23
MySQL GROUP BY/HAVING  (0) 2018.12.23
MySQL 자체 조인(self join)  (1) 2018.12.22