SELECT문 안에 포함되어 있는 SELECT문이라고 보면 된다.
메인쿼리는 서브쿼리의 컬럼을 참조할 수 없다.
WHERE절 서브쿼리에서는 ORDER BY절을 사용할 수 없다.
선수들의 평균 키보다 작은 선수들을 검색하라.
SELECT PLAYER_NAME 선수명, POSITION 포지션, BACK_NO 백넘버
FROM PLAYER
WHERE HEIGHT <= (
SELECT AVG(HEIGHT)
FROM PLAYER
)
ORDER BY PLAYER_NAME;
서브쿼리 한번 실행될 때 메인쿼리가 한번 실행되기 때문에, 총 2번 실행한다.
서브쿼리에서 PLAYER 테이블에서 키를 모두 읽고 AVG 단일값을 뽑아낸다. 이 단일값보다 작은 키를 메인쿼리에서 뽑는다.
Format
SELECT
FROM
WHERE expr 비교연산자 {ANY|SOME|ALL} (subquery);
Example
정현수 선수의 소속팀 정보를 검색하라.
SELECT REGION_NAME 연고지명, TEAM_NAME 팀명, E_TEAM_NAME 영문팀명
FROM TEAM
WHERE TEAM_ID = ANY (
SELECT TEAM_ID
FROM PLAYER
WHERE PLAYER_NAME = '정현수'
)
ORDER BY TEAM_NAME;
⭐ ANY란? -> '집합에서 어느 한 값을 잡았을 때'
메인쿼리의 TEAM 테이블에서 TEAM_ID가 서브쿼리의 PLAYER 테이블에서 PLAYER_NAME이 정현수인 선수의 TEAM_ID와 같을 때 출력한다.
Format
SELECT
FROM
WHERE expr [NOT] IN (subquery);
각 팀에서 제일 키가 작은 선수를 검색하라.
SELECT TEAM_ID 팀코드, PLAYER_NAME 선수명, POSITION 포지션,
BACK_NO 백넘버, HEIGHT 키
FROM PLAYER
WHERE (TEAM_ID, HEIGHT) IN (
SELECT TEAM_ID, MIN(HEIGHT)
FROM PLAYER
GROUP BY TEAM_ID
)
ORDER BY TEAM_ID, PLAYER_NAME;
메인쿼리의 PLAYER 테이블의 (TEAM_ID, HEIGHT) 중에 PLAYER 테이블의 (TEAM,ID, MIN(HEIGHT))와 같은게 있는지 확인하고 출력한다.