본문 바로가기
ORACLE/SQL

[Oracle] Correlated Subquery 상호연관쿼리 :: 마이자몽

by 🌻♚ 2020. 3. 21.

Correlated Subquery

Correlated Subquery는 내부 Subquery에서 외부테이블의 값을 참조할 때 사용됩니다. Subquery와는 다르게  Inner Query 부터 Outer Query 순서대로 실행되는 것이 아니라 Outer Query에서 읽어온 행을 갖고 Inner쿼리를 실행하는 것을 반복하여 결과를 출력해줍니다. Outer Query와 Inner Query에서 같은 테이블을 참조한다면 Outer Query의 테이블에 Alias를 사용해서 구분해줍니다.

 

 

예시문제

Oracle HR 계정  Employees 테이블을 사용해서

소속된 부서의 평균 급여보다 많은 급여를 받는 사원을 출력하시오.
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT
    FIRST_NAME
    ,JOB_ID
    ,DEPARTMENT_ID
    ,SALARY
FROM EMPLOYEES E
WHERE SALARY > (
    SELECT 
        ROUND(AVG(SALARY))
    FROM EMPLOYEES
    WHERE DEPARTMENT_ID = E.DEPARTMENT_ID
)
AND DEPARTMENT_ID < 60;

Nested Subquery를 사용해서 전체 사원의 평균 급여를 구하는 것은 문제가 없습니다. 그러나, 만약 각각 사원들의 소속되어 있는 부서의 평균 급여를 구하기 위해서 Correlated Subquery를 사용했습니다.

 

1단계. Subquery 내에서 Main Query의 테이블을 참조하는 것을 확인하고 Main Query에서의 후보행을 받아 조건에 부합되는 값을 얻습니다. 예제에서는 Subquery에서 Main Query에서의 첫번째 행을 들고 사원 정보에서 해당 부서의 평균 급여를 구합니다.

 

2단계. Subquery에서 얻은 부서의 평균 급여 값과 Main Query의 첫번째 값을 비교하여 해당 행을 출력에 포함시킬지 정합니다.

 

3단계. Main Query의 두번째 행으로 넘어가 위 단계를 똑같이 진행하여 마지막 행까지 반복합니다.

 

 

댓글0