개발일지/SQL

[Oracle] Outer Join (아우터 조인)

연습용365 2021. 11. 19. 07:17

 

 

 

[Oracle] 다양한 함수 배워보기

날짜 포맷 SELECT TO_CHAR(SYSDATE, 'YYYYMMDD') ,TO_CHAR(SYSDATE, 'YYYY/MM/DD') ,TO_CHAR(SYSDATE, 'YYYY-MM-DD') ,TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL; 날짜에 0 없애기 SELECT TO_CHAR(SYS..

practice365.xyz

Inner Join에 이어서 . . .

 

 

Outer Join(아우터 조인)

 

기본개념

- INNER JOIN과는 반대가 되는 개념

- 데이터가 양쪽에 없다 해도 보여 줄 수 있는 JOIN

 EQUI JOIN은 두 개의 테이블 중 한쪽 컬럼에 값이 없다면 나머지 테이블 값을 반환하지 못 한다.

- OUTER JOIN의 연산자는 '(+)'이다. 

- 아우터 조인 기호(+)는 다른 RDB에 없고, 오직 오라클에만 있다. 

- (+)는 양쪽에 올 수 없다.

- 조인시 값이 없는(NULL) 조인 측에 (+)가 온다. 

 

 

 

이것을 이용하는 이유는 간단하다. 예를들어 올해 1월에 퇴사한 직원이 있다고 가정해보자 이 경우 부서코드가 없기 때문에 데이터가 나오지 않는다. 1분기 영업 실적을 뽑으려고 할 때 당시에 있었던 직원들의 데이터까지 다 추출하기 위해서는 이런 아우터 조인의 개념이 필요하다. 

 

 

--현재 EMP 테이블을 기준으로 2021년 10월달 직원별 급여액 + 보너스 금액을 조회하는 쿼리
--조회 항목 : 직원번호, 직원명, 직급, 부서명, 급여년월, 실수령급여
  
SELECT E.EMPNO 직원번호, E.ENAME 직원명, E.JOB 직급, D.DNAME 부서명, 
       NVL(S.SALDATE, 0) 급여년월, TO_CHAR(NVL(S.SAL, 0) + NVL(S.COMM, 0), '999,999') 실수령급여
FROM SALARY S, EMP E, DEPT D
WHERE S.SALDATE(+) = '202109'
AND E.EMPNO = S.EMPNO(+)
AND E.DEPTNO = D.DEPTNO;

 

-- 과거에 존재 했던 급여 정보이기 때문에 현재 시점에서는 퇴사한 직원일 수 있다.

-- 없을수도 있는 직원에 OUTER JOIN(+)를 걸어서 데이터가 비어있어도 무조건 나와야 한다.

-- EMP를 조인으로 갖고오더라도 사람은 비어있다.