ITmembers.net 아카이브 · 2001–2009

재미로 배우는 오라클 & SQL 강좌

오라클 데이터 검색 - JOIN (3) OuterJoin

JOIN 마지막 시간입니다.
지난 시간의 EquJoin, NonEquJoin, SelfJoin에 이어 마지막으로 OuterJoin에 대해 알아보겠습니다.

Outer Join이란 Join조건을 만족하지 않는 경우에도 모든 행들을 다 보고자 할 경우에 사용하는 JOIN 방법입니다.
무슨 말이냐구요? 일단 다음 그림부터 봅시다.



EMP 테이블의 EMP_NUM 컬럼과 EMP_SKILL 테이블의 EMP_NUM 컬럼을 보세요.
EMP_SKILL 테이블의 EMP_NUM 중에 10005와 10007이 없죠?
이럴 경우 다음과 같이 검색하면 어떤 결과가 나올까요?

SELECT A.EMP_NUM, LAST_NAME, B.SKILL_NO
FROM EMP A,        EMP_SKILL B
WHERE A.EMP_NUM = B.EMP_NUM;

만약 위의 식을 정확하게 입력했다면 7개의 검색 결과가 나타날 것입니다.
EMP_NUM이 10001, 10001, 10002, 10003, 10004, 10004, 10006으로 나타날 것입니다. 중복된 것은 한번만 나타내라는 조건이 없으니까 B의 EMP_NUM을 기준으로 10001과 10004는 중복되어 나타나는 것입니다.
B의 EMP_NUM에 없는 10005와 10007은 검색되지 않을 것입니다.

그런데, 다음과 같이 검색식을 입력해 보세요.

SELECT A.EMP_NUM, LAST_NAME, B.SKILL_NO
FROM EMP A,        EMP_SKILL B
WHERE A.EMP_NUM = B.EMP_NUM(+);

어떻습니까? 검색 결과가 9개가 나타납니다.
즉 B 테이블에 없던 10005와 10007도 표시됩니다. SKILL_NO가 Null인 상태로 말입니다.(B 테이블에 해당 SKILL_NO가 없으니까 Null로 표시된 것입니다.) 이때 SKILL_NO는 당연히 Null값이 허용되는 컬럼이겠죠.

그럼 이제 OuterJoin에 대해 정리하겠습니다.

  • Outer Join이란 Join조건을 만족하지 않는 경우에도 모든 행들을 다 보고자 할 경우에 사용하는 JOIN 방법이다. 아까 위에서 말씀드렸죠?
  • Outer Join을 하는 경우 (+)연산자를 사용한다.(괄호까지 포함합니다.)
  • (+)를 사용하는 위치는 JOIN할 Data가 부족한 쪽에 위치시킨다.
  • (+)는 WHERE절에서 비교연산자 기준으로 좌변 또는 우변의 어느 한쪽에만 위치시킨다. (양쪽 모두 사용할 수는 없습니다.)
  • Outer Join에서 IN을 쓰거나 Outer Join 조건이 OR로 연결될 수 없다.


끝내기 전에 문제 하나 낼까요?
아래와 같이 (+)를 적용하면 어떤 결과가 나타날까요?

SELECT A.EMP_NUM, LAST_NAME, B.SKILL_NO
FROM EMP A,        EMP_SKILL B
WHERE A.EMP_NUM(+) = B.EMP_NUM;

궁금하시면 직접 한번 해 보시길...

이상 동주 아빠 손병목이었습니다.