더북(TheBook)

ANSI 외부 조인

ANSI 외부 조인도 그 형식은 내부 조인과 비슷하다. 기존 문법과 비교해 보자.

<기존 문법>

    SELECT A.컬럼1, A.컬럼2, B.컬럼1, B.컬럼2 ...
      FROM 테이블 A, 테이블 B
     WHERE A.컬럼1 = B.컬럼1(+)
    ...;

<ANSI 문법>

    SELECT A.컬럼1, A.컬럼2, B.컬럼1, B.컬럼2 ...
      FROM 테이블 A
      LEFT(RIGHT) [OUTER] JOIN 테이블 B
        ON ( A.컬럼1 = B.컬럼1)
    WHERE ...;

기존 문법에서는 기준 테이블과 대상 테이블(데이터가 없는 테이블)에서 대상 테이블쪽 조인 조건에 (+)를 붙였지만, ANSI 외부 조인은 FROM 절에 명시된 테이블 순서에 입각해 먼저 명시된 테이블 기준으로 LEFT 혹은 RIGHT를 붙이는 점이 다르다.

<기존 문법>

입력

    select a.employee_id, a.emp_name, b.job_id, b.department_id
      from employees a,
           job_history b
     where a.employee_id  = b.employee_id(+)
       and a.department_id = b.department_id(+);

결과

    ....
    108개의 행이 선택됨.

<ANSI 문법>

입력

    SELECT a.employee_id, a.emp_name, b.job_id, b.department_id
      FROM employees a
      LEFT OUTER JOIN job_history b
        ON ( a.employee_id  = b.employee_id
             and a.department_id = b.department_id) ;

결과

    ...
    108개의 행이 선택됨.

위 쿼리는 사원 테이블이 기준이 되어 job_history 테이블을 LEFT OUTER JOIN으로 연결했는데, 다음과 같이 테이블 순서를 바꾸면 RIGHT OUTER JOIN으로 변경이 가능하다.

입력

    SELECT a.employee_id, a.emp_name, b.job_id, b.department_id
      FROM job_history b
     RIGHT OUTER JOIN employees a
        ON ( a.employee_id  = b.employee_id
             and a.department_id = b.department_id) ;

결과

    ....
    108개의 행이 선택됨.

또한 외부 조인은 OUTER라는 키워드를 붙이는데, 이는 생략이 가능하다. 즉 LEFT JOIN 혹은 RIGHT JOIN이라고 명시해도 이는 외부 조인을 의미한다.

입력

    SELECT a.employee_id, a.emp_name, b.job_id, b.department_id
      FROM employees a
      LEFT JOIN job_history b
        ON ( a.employee_id  = b.employee_id
             and a.department_id = b.department_id) ;

결과

    ....
    108개의 행이 선택됨.
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.