Main Query
)에 반대되는 개념으로 이름붙인 것으로, 메인쿼리를 구성하는 소단위 쿼리이다.
select, insert, delete, update
절에서 모두 사용된다.- 서브쿼리 자체는 일반 쿼리와 다를 바가 없으며, 서브쿼리의 결과 집합을 메인쿼리가 중간 결과값으로 사용할 수 있다.
EMPLOYEES
테이블에서 직원 평균 급여보다 낮은 급여를 받는 직원 정보를 가져온다.
SELECT * FROM EMPLOYEES e WHERE SALARY < ( SELECT ROUND(AVG(SALARY)) FROM EMPLOYEES e ) ;
LOCATIONS
테이블에서 COUNTRY_ID
가 US
인 LOCATION_ID
값을 갖는 지역 정보를 가져온다.
SELECT * FROM LOCATIONS l WHERE LOCATION_ID IN (SELECT LOCATION_ID FROM LOCATIONS l WHERE COUNTRY_ID = 'US' ) ;
EMPLOYEES
테이블을 DEPARTMENT_ID
로 그룹지어 DEPARTMENT_ID
가 100인 부서의 최소급여보다 최소 급여가 높은 부서를 HAVING
으로 가져온다.
SELECT * FROM EMPLOYEES e GROUP BY DEPARTMENT_ID HAVING MIN(SALARY) > ( SELECT MIN(SALARY) FROM EMPLOYEES e WHERE DEPARTMENT_ID = 100) ;
EMPLOYEES
테이블을 JOB_ID
로 그룹지어 직무별 최소급여를 갖는 테이블을 구하고, JOB_ID
와 SALARY
가 해당 테이블과 일치하는 직원, 즉 직무별로 최소급여를 받는 직원 정보를 구한다.
SELECT * FROM EMPLOYEES e WHERE (JOB_ID,SALARY) IN( SELECT JOB_ID , MIN(SALARY) FROM EMPLOYEES e GROUP BY JOB_ID) ;
서브쿼리를 사용한 조건도 AND
으로 나열할 수 있다.
SELECT * FROM EMPLOYEES e WHERE JOB_ID = ( SELECT JOB_ID FROM EMPLOYEES e WHERE EMPLOYEE_ID = 123) AND SALARY > ( SELECT SALARY FROM EMPLOYEES e WHERE EMPLOYEE_ID = 192) ;