19.12.02. OUTER JOIN
데이터베이스 구현
2019-12-02 22:53:41
▶OUTER JOIN
컬럼 연결이 실패해도(JOIN이 실패해도) 기준이 되는 테이블의 데이터가 나오도록 하는 JOIN 방법.
1. left[right] outer join
: 테이블 1 LEFT[RIGHT] OUTER JOIN 테이블2
테이블 1과 테이블 2를 조인할 때 조인에 실패하더라도 테이블 1쪽의 테이터는 조회되도록 한다.
조인에 실패한 행에서 테이블 2의 컬럼값은 존재하지 않으므로 NULL 로 표시.
RIGHT 의 경우 테이블 2쪽의 데이터가 조회되고, 테이블 1이 NULL로 표시.
2. full outer join
: LEFT OUTER JOIN + RIGHT OUTER JOIN 에 중복된 것을 제거한 것.
SELECT e.ename, e.empno, m.ename, m.empno
FROM emp e LEFT OUTER JOIN emp m ON (e.mgr = m.empno);
--
SELECT e.ename, e.empno, e.deptno, m.ename, m.empno, m.deptno
FROM emp e LEFT OUTER JOIN emp m ON (e.mgr = m.empno)
WHERE m.deptno = 10;
--
SELECT e.ename, e.empno, e.deptno, m.ename, m.empno, m.deptno
FROM emp e LEFT OUTER JOIN emp m
ON (e.mgr = m.empno AND m.deptno = 10);
=> 두 개의 차이 : 위 쿼리에서는 WHERE 절이 애초에 deptno 가 10 인 것만 조회해서
NULL 값을 가진 것은 미리 삭제해버렸고, 아래 쿼리에서는 NULL 값인 것도 조회된다.
-- ANSI SQL
SELECT e.ename, e.empno, m.ename, m.empno
FROM emp e LEFT OUTER JOIN emp m ON (e.mgr = m.empno);
-- ORACLE SQL
SELECT e.ename, e.empno, m.ename, m.empno
FROM emp e, emp m
WHERE e.mgr = m.empno(+);
=> 오라클 문법에서는 매니저의 직원 번호가 NULL 이 있기 때문에 이쪽에 (+) 를 붙여주었다.
WHERE 절에 오는 모든 NULL값을 가지는 부분에 (+) 을 써주어야 한다.
'database' 카테고리의 다른 글
oracle - SUB QUERY, EXISTS 등 (0) | 2023.03.13 |
---|---|
oracle - Inner join, Cross join (0) | 2023.03.13 |
oracle - GROUP, JOIN, EXERD 다운로드 (0) | 2023.03.13 |
oracle - CONDITION, VIRTUAL BOX 설치 (0) | 2023.03.13 |
oracle - 형변환의 종류, 숫자포맷, NULL처리 함수 (0) | 2023.03.13 |