Database
[MySQL] 서브쿼리와 ANY, ALL
Jinn
2023. 10. 30. 15:48
김경호보다 키가 큰 사람의 이름과 키를 출력하려면 김경호의 키를 직접 써줘야 한다.
즉, 김경호의 키를 알고 있어야 한다는 것이다.
SELECT name, height FROM usertbl WHERE height > 177;
서브쿼리를 사용하면 김경호의 키 177을 직접 써주지 않고 조회할 수 있다.
SELECT name, height FROM usertbl
WHERE height > (SELECT height FROM usertbl WHERE name = '김경호');
다음 SQL문의 결과는 어떨까
SELECT name, height FROM usertbl
WHERE height > (SELECT height FROM usertbl WHERE addr = '경남');
서브쿼리의 결과가 2개 이상(170, 173)이라서 오류가 발생했다.
WHERE height > 170, 173이 되면서 문장이 모호해진 것이다.
SELECT name, height FROM usertbl
WHERE height > ANY (SELECT height FROM usertbl WHERE addr = '경남');
ANY를 사용하면 '170보다 큰' 또는 '173보다 큰'으로 적용되어 조회된다.
결국 키가 170보다 큰 사람이 조회된 것이다. 즉, ANY는 OR와 같은 역할이다.
SELECT name, height FROM usertbl
WHERE height > ALL (SELECT height FROM usertbl WHERE addr = '경남');
ALL을 사용하면 '170보다 큰' 그리고 '173보다 큰'으로 적용되어 결과적으로 173보다 큰 사람이 조회된다.
ALL은 AND와 같은 역할인 것이다.