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 |