오라클 쿼리문 작성이 익숙하지 않을 때 가장 헷갈렸던 부분이 아우터 조인(Outer Join)이다. 오라클 아우터 조인 시 대상 컬럼에 "(+)" 기호를 붙여서 조인을 하면된다.
아우터 조인을 사용하는 이유는 기준 테이블의 데이터가 모두 조회(누락 없이) 되고, 대상 테이블에 데이터가 있을 경우 해당 컬럼의 값을 가져오기 위해서이다.
핵심은 조인을 하더라도 기준 테이블의 데이터가 누락되지 않도록 하는 것이다.
위의 데이터를 보면 "KING", "JAMES"의 DEPTNO가 DEPT 테이블에 존재하지 않는다. 이 상태에서 조인으로 쿼리문을 작성하면 "KING", "JAMES"의 데이터는 조회되지 않는다.
아우터 조인으로 쿼리문을 작성하면 조인이 되면 DEPT 테이블의 데이터를 가져오고, 조인이 되지 않으면 DEPT 테이블의 데이터는 NULL로 조회되고 EMP 테이블의 데이터는 정상적으로 조회된다.
아우터 조인(외부조인)은 오라클 조인과 ANSI JOIN 두가지 방법으로 작성할 수 있다.
오라클 아우터 조인(+) 예제
- 아우터 조인을 할 대상 테이블(dept)의 컬럼에 "(+)" 기호를 붙여서 조인한다.
- 기준 테이블(emp)의 deptno가 대상 테이블(dept)에 존재 할 경우 부서명(dname)를 가져오고 없으면 NULL로 조회된다.
- 기준 테이블(emp)의 데이터는 대상 테이블(dept)에 값이 없어도 모두 조회 되어야 한다.
- 아우터 조인 시 두개 이상의 컬럼의 사용하는 예제이다.
- 대상 테이블(dept)의 컬럼에 모두 "(+)" 기호를 붙여야 한다.
- 대상 테이블(dept)의 컬럼에 값을 대입해야 할 경우에도 해당 컬럼에 "(+)" 기호를 붙인다.
- b.useyn(+) = "Y"에서 "(+)" 기호를 붙이지 않으면 "KING", "JAMES"의 데이터는 조회되지 않는다.
ANSI OUTER JOIN (LEFT,RIGHT) 예제
- LEFT는 기준 테이블을 가리키는 구문이며, 왼쪽(LEFT) emp 테이블이 기준 테이블이 된다.
- RIGHT로 바꾸면 dept 테이블이 기준 테이블이 된다.
- WHERE절이 아니라 ON절에 조인 컬럼을 작성하면 된다.
- 두개 이상의 컬럼을 조인할 수 있다.