OUTER JOIN에서 조건 차이...? 0 1 5,047

by 정수용 [Oracle 기초] ORACLE OUTER JOIN WHERE > [2018.06.19 16:24:59]


3000.png (22,422Bytes)
2000.png (25,761Bytes)

안녕하세요!

OUTER JOIN에 대해 숙지 했다고 생각했는데,

이해가 잘 가지 않는 부분이 생겨서 질문합니다

 

DEPT 테이블의 DEPTNO컬럼에는 10,20,30,40 총 4개의 값이 있고,

EMP 테이블의 DEPTNO컬러에는 10,20,30 이렇게 총 3개의 값이 있습니다.

그리고 EMP테이블에 SAL컬럼에는 5000까지 다양한 값이 있습니다.

 

여기서 DEPT와 EMP를 조인하는데,

SELECT D.DEPTNO AS DEPT_DEPTNO 
      ,D.DNAME
      ,E.DEPTNO AS EMP_DEPTNO
      ,E.EMPNO
      ,E.ENAME
      ,E.SAL
FROM DEPT D , EMP E
WHERE E.DEPTNO(+)=D.DEPTNO
AND E.SAL(+) > 2000;

이렇게 검색하면 연봉이 2000이상인 경우와 EMP테이블에는 없는 DEPTNO가 40인 경우만 조회가 가능합니다. 여기까지는 이해를 한 부분인데, 

문제는 조건이 E.SAL(+)>3000으로 하게 되면, 연봉이 3000보다 큰 경우 1개와 DEPTNO가 20,30,40까지 포함하여 총 4줄이 나오게 됩니다.

3000이상에는 3000이상이며 EMP테이블에 있는 DEPTNO는 NULL로 해서 결국 DEPTNO가 다 나오는건데.. 이해가 잘 가지 않습니다.

 

제가 설명을 잘못해서 실행한부분까지 파일로 첨부하였습니다!

각 파일에 있는 쿼리문의 결과는 모두 동일합니다.

댓글 부탁드립니다!

 

 

by 마농 [2018.06.19 16:39:23]

아우터 조인에는 기준집합(메인, 아우터테이블)과 조인대상집합(서브, 이너테이블)이 존재합니다.
위 쿼리에서는 (+) 가 붙지 않은 쪽 DEPT 가 기준집합입니다.
아우터 조인의 경우 기준집합은 무조건 나옵니다.
반대쪽 서브 집합에서는 조인 조건을 만족하는 것만 조인되어 나옵니다.
즉, dept 의 10,20,30,40 이 모두 나오고
1. emp 의 급여가 2000 보다 큰 사원 6명이 10,20,30 부서에 조인되어 나옵니다.
  - 10,20,30 부서 조인 결과 6건에 40 부서는 무조건 나와야 하구요. 총 7건
2. emp 의 급여가 3000 보다 큰 사원 1명이 10 부서에 조인되어 나옵니다.
  - 10 부서 조인 결과 1건에 20,30,40 부서는 무조건 나와야 하구요. 총 4건
 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입