본문 바로가기
DB & SQL

MySQL ANY(SOME) / ALL

by pms93 2023. 1. 16.

 

ANY

Subquery의 결과에 따라 Boolean을 반환한다.

결과물이 1개라도 있을시 TRUE를, 없을시 FALSE를 반환하며 Mainquery는 Subquery의 결과물이 TRUE일 시에 Subquery의 결과물을 기반으로 레코드를 반환한다.

SELECT facilities.title,
               facilities.tel,
               area.areaName,
               facilities.areaCode
FROM facilities INNER JOIN area
                                        ON facilities.areaCode = area.areaCode
WHERE facilities.areaCode = ANY (SELECT areaCode
                                                         FROM Facilities
                                                         WHERE contentTypeId = 14);

1) facilities와 area를 areaCode로 INNER JOIN
2-1) Subquery의 결과는 TRUE이며 contentTypeId가 '14'인 데이터의 areaCode를 반환한다. (하단 사진 참조)
2-2) WHERE facilities.areaCode IN (1, 2, 4, 7, 31, 32, 33, 35, 37, 38)과 동일하다.


WHERE facilities.areaCode = ANY (SELECT areaCode
                                                         FROM Facilities
                                                         WHERE contentTypeId = 14);


                                                                       ↓↓↓↓


WHERE facilities.areaCode = 1 OR
               facilities.areaCode = 2 OR
               facilities.areaCode = 4 OR
               facilities.areaCode = 7 OR
                                 ●
                                 ●
                                 ●
               facilities.areaCode = 37 OR
               facilities.areaCode = 38;

subquery의 결과

 

Mainquery 실행 결과는 아래와 같다.

 

ALL

ANY와 마찬가지로 Subquery의 결과에 따라 Boolean을 반환한다.

ANY는 Subquery의 결과물을 WHERE의 OR연산자로서 사용했다면 ALL은 AND연산자로 사용한다.

SELECT title,
               tel,
               areaCode
FROM facilities
WHERE areaCode = ALL (SELECT areaCode
                                           FROM facilities
                                           WHERE contentTypeId = 14);

1) contentTypeId가 14인 데이터(1, 2, 4, 7, 31, 32, 33, 35, 37, 38)를 AND연산자의 조건으로서 사용하게 된다.


WHERE areaCode = ALL (SELECT areaCode
                                           FROM facilities
                                           WHERE contentTypeId = 14);

                                                                       ↓↓↓↓

WHERE areaCode = 1 AND
               areaCode = 2 AND
               areaCode = 4 AND
               areaCode = 7 AND

                                 ●
                                 ●
                                 ●
               areaCode = 37 AND
               areaCode = 38;

 

Mainquery 실행 결과는 아래와 같다. 모든 조건에 만족하는 areaCode는 없으므로 어떠한 결과도 반환하지 않는다.

 

'DB & SQL' 카테고리의 다른 글

MySQL CASE  (0) 2023.01.16
MySQL INSERT INTO SELECT  (0) 2023.01.16
MySQL EXISTS / NOT EXISTS  (0) 2023.01.12
My SQL 변수선언(ROWNUM)  (0) 2023.01.11
MySQL HAVING  (0) 2023.01.11