SQL에서 서브쿼리(subquery)를 사용하여 테이블을 조회할 수 있습니다. 서브쿼리란 다른 SQL 문장 안에 포함된 SELECT 문장으로, 외부 쿼리의 결과에 따라 실행되는 쿼리입니다. 서브쿼리를 사용하면 한 번의 쿼리로 복잡한 데이터를 조회할 수 있습니다.
기본 서브쿼리
다음은 기본적인 형태의 서브쿼리를 사용한 테이블 조회 예제입니다.
SELECT *
FROM employees
WHERE department_id = (
SELECT department_id
FROM departments
WHERE department_name = 'Sales'
);
위의 쿼리는 departments
테이블에서 ‘Sales’ 부서의 department_id
를 조회한 후, 이를 이용해 employees
테이블에서 해당 부서의 직원을 조회합니다.
다중 행 서브쿼리
서브쿼리는 단일 값을 반환하는 경우 뿐만 아니라 다중 행을 반환할 수도 있습니다. 이 경우에는 IN
과 같은 연산자를 사용하여 다중 행을 비교할 수 있습니다.
다음은 다중 행 서브쿼리를 사용한 테이블 조회 예제입니다.
SELECT *
FROM employees
WHERE department_id IN (
SELECT department_id
FROM departments
WHERE location_id = '1700'
);
위의 쿼리는 departments
테이블에서 location_id
가 ‘1700’인 부서들의 department_id
를 조회한 후, 이를 이용해 employees
테이블에서 해당 부서의 직원을 조회합니다.
존재 여부에 따른 서브쿼리
때로는 서브쿼리의 결과가 존재하는지 여부에 따라 조건을 설정해야 하는 경우가 있습니다. 이때는 EXISTS
를 사용할 수 있습니다.
다음은 존재 여부에 따른 서브쿼리를 사용한 테이블 조회 예제입니다.
SELECT department_name
FROM departments d
WHERE EXISTS (
SELECT employee_id
FROM employees e
WHERE e.department_id = d.department_id
);
위의 쿼리는 부서에 속한 직원이 존재하는 경우에만 해당 부서명을 조회합니다.
서브쿼리를 활용하면 복잡한 데이터 검색과 필터링을 간단하게 수행할 수 있습니다. 하지만 서브쿼리가 많이 사용될수록 성능에 영향을 미칠 수 있으므로 주의가 필요합니다.