[Oracle] 오라클 BETWEEN 아우터 조인 방법
- 데이터베이스/오라클
- 2022. 11. 30.
오라클에서 아우터 조인 시 BETWEEN 연산자를 사용해야 할 경우가 있다. 일반적인 아우터 조인과 상황이 조금 틀리기 때문에 당황할 수 있지만 조인 방법을 큰 차이가 없다. BETWEEN 연사자를 사용할 경우 오라클 Outer Join과 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 조인과 오라클 조인을 비교하여 두 가지 방식 모두 정확한 사용법을 익혀두는 것이 좋다.