[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를 조인으로 갖고오더라도 사람은 비어있다.
'개발일지 > SQL' 카테고리의 다른 글
Oracle DB SQL Developer : Network 오류 (0) | 2021.11.20 |
---|---|
인덱스 리빌드 사용방법 (0) | 2021.11.19 |
[Oracle] 테이블 설정 / 테이블 밖에서 PK, FK 설정 (0) | 2021.11.19 |
[Oracle] 기본키 2개 이상 지정 (기본키 복수 칼럼 지정) (0) | 2021.11.19 |
[oracle 초보자] 데이터 쉽게 복붙 및 수정 (0) | 2021.11.19 |