outer join 개념적인 질문.. 0 2 2,006

by 손님 [2011.04.29 16:19:37]



밑에 있는 분의 질문을보고 실습을 해보던중

select a.empcd, b.deptname
from emp a
left outer join dept b on a.dptcd = b.dptcd and a.empcd = '7788'

이것과

select a.empcd, b.deptname
from emp a
left outer join dept b on a.dptcd = b.dptcd 
where a.empcd = '7788'

둘의 차이는 무엇인가요 ?

결과값이 상이하게 나오던데..

ANSI 오라클의 9I부터 적용된 (+) 표현했을때 두가지 쿼리를 어떻게 만들어야 될지 ..?
by 마농 [2011.04.29 16:24:02]
ON 절은 조인을 위한 조건, WHERE 절은 자료를 걸러내는 필터링 조건이라고 보시면 됩니다.

1번 쿼리는 7788 만 조인에 참여하게 되므로 1건만 조인에 성공하게 되어 나머지는 널로 보이겠지요.
즉, emp 의 모든 자료가 다 조회되지만 부서명은 7788 사원만 보이죠.

2번 쿼리는 7788 만 남기고 나머지는 다 버린 상태에서 조인을 하게 되겠지요.

by 마농 [2011.04.29 16:41:07]
-- 2번은 변경하는데 어려움이 없을 듯 하구요.
SELECT a.empcd, b.deptname
FROM emp a
, dept b
WHERE a.empcd = '7788'
AND a.dptcd = b.dptcd(+)
;

-- 1번은 약간의 트릭을 쓰셔야 할듯.
SELECT a.empcd, b.deptname
FROM emp a
, dept b
WHERE DECODE(a.empcd, '7788', a.dptcd) = b.dptcd(+)
;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입