쿼리 안에 쿼리가 있을 때, 서브쿼리 또는 하위쿼리라 부름
기본형식
SELECT * FROM user WHERE height> 180;
- user 테이블에서 height 가 180 이상인 데이터를 조회하는 쿼리이다.
- 이 때 180 에 해당하는 값을 쿼리로 대체하는 서브쿼리 사용 예제는 아래와 같다.
SELECT * FROM user
WHERE height > (SELECT height FROM user WHERE name = ‘호날두’) ;
- 이 쿼리의 내용은 name 이 ‘호날두’ 인 데이터의 height 보다 height 가 큰 데이터를 조회하는 쿼리이다.
- 서브쿼리를 Where 절에서 사용한 예시이다.
WHERE 절에서 ANY와 ALL의 활용
- ANY(SOME), ALL
SELECT * FROM user
WHERE height > (SELECT height FROM user WHERE team = ‘레알 마드리드’) ;
이 쿼리는 team 값이 ‘레알 마드리드’ 인 데이터보다 height이 큰 데이터를 조회하는 쿼리이다. 그러나 위와 같이 조회할 경우 오류가 발생할 수 있다. WHERE 절의 서브쿼리의 결과가 2개 이상인 경우 오류가 발생한다.
오류 메시지: Subquery returns more than 1 row
SELECT * FROM user
WHERE height > ANY (SELECT height FROM user WHERE team = ‘레알 마드리드’) ;
ANY를 사용하면 어떻게 될까? 예를 들어 team이 ‘레알 마드리드’에 해당하는 데이터의 height이 3개인데 167, 180, 185 라고 했을 때, 167보다 큰 값, 180보다 큰 값, 185보다 큰 값을 모두 조회하게 된다. 즉 167보다 큰 값을 조회하는 것과 같은 결과가 출력된다.
SELECT * FROM user
WHERE height > ALL (SELECT height FROM user WHERE team = ‘레알 마드리드’) ;
ALL를 사용하면 어떻게 될까? WHERE 절의 결과가 167, 180, 185 라고 했을 때, 167보다 큰 값, 180보다 큰 값, 185보다 큰 값 모두 해당해야 값을 출력하게 되어 결국 185보다 큰 값을 조회하는 것과 같은 결과가 출력된다.
'MySQL' 카테고리의 다른 글
06. 집계함수(GROUP BY와 함께 사용) (0) | 2022.05.03 |
---|---|
05. ORDER BY (0) | 2022.05.03 |
03. WHERE (0) | 2022.05.03 |
02. SELECT (0) | 2022.05.02 |
01. 데이터베이스 구조 및 개념 (0) | 2022.05.02 |