[Oracle] 오라클 BETWEEN 아우터 조인 방법

오라클에서 아우터 조인 시 BETWEEN 연산자를 사용해야 할 경우가 있다. 일반적인 아우터 조인과 상황이 조금 틀리기 때문에 당황할 수 있지만 조인 방법을 큰 차이가 없다. BETWEEN 연사자를 사용할 경우 오라클 Outer Join과 ANSI Outer Join 방법은 아래의 예제를 참고하면 쉽게 이해할 수 있을 것이다.

 

목차
  1. 오라클 Outer Join을 사용하는 방법
  2. ANSI Outer Join을 사용하는 방법

 

오라클 Outer Join을 사용하는 방법

WITH employees AS (
    SELECT 101 AS employee_id, 'Neena'     AS first_name, 'Kochhar' AS last_name, TO_DATE('2005-09-21', 'YYYY-MM-DD') AS hire_date, 'AD_VP'   AS job_id FROM dual UNION ALL
    SELECT 102 AS employee_id, 'Lex'       AS first_name, 'De Haan' AS last_name, TO_DATE('2001-01-13', 'YYYY-MM-DD') AS hire_date, 'AD_VP'   AS job_id FROM dual UNION ALL
    SELECT 103 AS employee_id, 'Alexander' AS first_name, 'Hunold'  AS last_name, TO_DATE('2006-01-03', 'YYYY-MM-DD') AS hire_date, 'IT_PROG' AS job_id FROM dual
), job_history AS (
    SELECT 102 AS employee_id, TO_DATE('2001-01-13', 'YYYY-MM-DD') AS start_date, TO_DATE('2006-07-24', 'YYYY-MM-DD') AS end_date, 'IT_PROG' AS job_id FROM dual 
)

SELECT a.employee_id
     , a.first_name
     , a.job_id
     , b.job_id AS prev_job_id
  FROM employees a
     , job_history b
 WHERE a.employee_id = b.employee_id(+)
   AND a.hire_date BETWEEN b.start_date(+) AND b.end_date(+)

 

 

위의 예제를 보면  BETWEEN 절에서 아우터 조인 대상 테이블의 칼럼에 (+)를 붙여주면 정상적으로 아우터 조인이 된다. 예제 쿼리문에서 아우터 조인(+)을 제거하고 실행 보면 정확한 차이를 알 수 있을 것이다.

 

ANSI Outer Join을 사용하는 방법

WITH employees AS (
    SELECT 101 AS employee_id, 'Neena'     AS first_name, 'Kochhar' AS last_name, TO_DATE('2005-09-21', 'YYYY-MM-DD') AS hire_date, 'AD_VP'   AS job_id FROM dual UNION ALL
    SELECT 102 AS employee_id, 'Lex'       AS first_name, 'De Haan' AS last_name, TO_DATE('2001-01-13', 'YYYY-MM-DD') AS hire_date, 'AD_VP'   AS job_id FROM dual UNION ALL
    SELECT 103 AS employee_id, 'Alexander' AS first_name, 'Hunold'  AS last_name, TO_DATE('2006-01-03', 'YYYY-MM-DD') AS hire_date, 'IT_PROG' AS job_id FROM dual
), job_history AS (
    SELECT 102 AS employee_id, TO_DATE('2001-01-13', 'YYYY-MM-DD') AS start_date, TO_DATE('2006-07-24', 'YYYY-MM-DD') AS end_date, 'IT_PROG' AS job_id FROM dual 
)

SELECT a.employee_id
     , a.first_name
     , a.job_id
     , b.job_id AS prev_job_id
  FROM employees a
  LEFT OUTER JOIN job_history b
    ON a.employee_id = b.employee_id
   AND a.hire_date BETWEEN b.start_date AND b.end_date

 

 

ANSI 아우터 조인을 사용하면 헷갈리지 않고 자연스럽게 쿼리문을 작성할 수 있다. ANSI 조인과 오라클 조인을 비교하여 두 가지 방식 모두 정확한 사용법을 익혀두는 것이 좋다.

 

 

 

[Oracle] 오라클 아우터 조인 사용법

오라클 쿼리문 작성이 익숙하지 않을 때 가장 헷갈렸던 부분이 아우터 조인(Outer Join)이다. 오라클 아우터 조인 시 대상 컬럼에 "(+)" 기호를 붙여서 조인을 하면된다. 아우터 조인을 사용하는 이

gent.tistory.com

 

[Oracle] 오라클 조인 방법 쉽게 설명

오라클에서 조인을 할 때 오라클 조인(Oracle Join)과 안시 조인(ANSI JOIN)을 사용할 수 있다. 오라클 9i 까지는 오라클 조인만 사용할 수 있으며, 오라클 10g부터는 안시 조인을 추가로 사용할 수 있다.

gent.tistory.com

 

[Oracle] 여러개 테이블 ANSI JOIN 방법

오라클 9i 버전부터 ANSI JOIN을 지원하기 시작했다. 그렇지만 아직까지 오라클 데이터베이스를 사용하는 많은 시스템에서 ANSI JOIN을 사용하지 않고 오라클 방식의 조인을 사용하여 쿼리문을 작성

gent.tistory.com

 

댓글

Designed by JB FACTORY