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개의 행이 선택됨.
    
    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.