[sql] 서브쿼리를 사용한 테이블 조회 방법

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
);

위의 쿼리는 부서에 속한 직원이 존재하는 경우에만 해당 부서명을 조회합니다.

서브쿼리를 활용하면 복잡한 데이터 검색과 필터링을 간단하게 수행할 수 있습니다. 하지만 서브쿼리가 많이 사용될수록 성능에 영향을 미칠 수 있으므로 주의가 필요합니다.