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개의 행이 선택됨.