MySQL

04. SubQuery - Where 절에서

newness 2022. 5. 3. 00:30

쿼리 안에 쿼리가 있을 때, 서브쿼리 또는 하위쿼리라 부름

 

기본형식

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