더북(TheBook)

외부 조인을 사용하니 ‘왕건’ 데이터도 조회됐군요. 다만 ‘왕건’의 dept_id 값이 NULL이므로 부서정보 테이블과 일치하는 건이 없어 SELECT 절에서 명시한 부서정보 테이블 컬럼 값은 모두 NULL로 조회되었습니다. 원하는 결과가 나왔으니 이제 외부 조인 구문을 살펴봅시다.

외부 조인은 내부 조인과 거의 흡사하지만 WHERE 절의 조인 컬럼에 (+)가 붙어 있습니다. 두 테이블의 조인 컬럼에서 데이터가 없는 테이블의 조인 컬럼에 (+) 기호를 붙입니다. 여기서 (+)는 데이터가 없으니 추가로 가져오라는 뜻입니다. 쿼리 9-9에서는 사원정보 테이블에서 ‘왕건’의 dept_id 값이 NULL이고, 이 값과 일치하는 데이터가 부서정보 테이블에 없으니 부서정보 테이블의 dept_id 쪽에 (+)를 추가한 것입니다. 즉, 두 테이블에서 데이터를 모두 가져올 기준 테이블이 사원정보 테이블인 것입니다.

여기서 한 가지 짚고 넘어가야 하는 것이 있는데, 외부 조인에서 (+) 기호는 오라클에서만 사용할 수 있습니다. 다른 RDBMS는 다른 방식으로 구문을 작성해야 합니다. 하지만 ANSI 문법을 사용하면 오라클뿐만 아니라 다른 RDBMS에서도 같은 문법을 사용할 수 있습니다. 쿼리 9-9를 ANSI 문법으로 변경해 보죠.

쿼리 9-10 ANSI 구문으로 작성한 외부 조인

SELECT a.emp_id, a.emp_name, a.gender, a.age, a.dept_id,
       b.dept_id, b.dept_name, b.use_yn
  FROM emp_master a
  LEFT JOIN dept_master b
    ON a.dept_id = b.dept_id
 ORDER BY a.emp_id;

 

▲ 그림 9-8 쿼리 9-10을 실행한 결과

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.