본문 바로가기

DB

[DB] SQL - 상호 연관 서브쿼리란?

728x90

정의

서브 쿼리 내부에서 외부 쿼리의 값을 참조하는 서브 쿼리를 뜻한다.

일반적인 서브 쿼리의 경우 외부 쿼리의 값을 참조하지 않는다.

하지만, 상호 연관 서브쿼리의 경우 외부 쿼리의 컬럼을 참조하기 때문에, 행마다 서브 쿼리의 결과가 달라지게 된다.

사용 예시

설명만 들으면 잘 이해가 안가기 때문에 예시로 설명을 해보겠다.

  • 사원 정보를 담고있는 emp 테이블
    emp_id name sal dept_id
    1 Alice 3000 10
    2 Bob 4000 10
    3 Carol 2500 20
    4 Dave 3500 20
    5 Erin 2000 30
  • 부서 정보를 담고있는 dept 테이블
    dept_id dept_name
    10 HR
    20 IT
    30 SALES

일반 서브쿼리

전체 사원 평균 급여보다 많이 받는 사원을 찾으려는 경우

SELECT name, sal
FROM emp
WHERE sal > (
    SELECT AVG(sal) FROM emp
);
  • SELECT AVG(sal) FROM emp 는 단 한 번 실행되어 평균 급여를 반환한다.
  • 그 값을 기준으로 sal > 평균 조건을 필터링한다.

결과

name sal
Bob 4000
Dave 3500

상호 연관 서브쿼리

자신의 부서 평균 급여보다 많이 받는 사원을 찾으려는 경우

SELECT name, sal
FROM emp e
WHERE sal > (
    SELECT AVG(sal)
    FROM emp
    WHERE dept_id = e.dept_id
);
  • e.dept_id는 외부 쿼리의 값을 서브쿼리에서 사용한다.
  • 각 사원의 부서별 평균을 행마다 다시 계산한다.

결과

name sal
Bob 4000
Dave 3500

위 예시를 보면 일반 서브쿼리는 독립적으로 한 번 실행하고, 상호 연관 서브쿼리는 외부 쿼리의 각 행마다 실행되는것을 확인할 수 있다.

728x90