본문 바로가기
DB/ORACLE

Self Join 자기 참조 조인, Outer Join

by 골든크랩 2022. 12. 23.
728x90
반응형

3.3

 

동일한 테이블에 다른 별명을 붙여 마치 여러 개의 테이블 간에 조인하는 것처럼 만들어 조회

대표적인 예가 EMP 테이블의 EMPNO필드와 MGR 필드 를 참조하는것.

테이블에 반드시 별명을 붙여야 함으로 '별명을 이용한 조인'이라고 부른다.

 

코드성 테이블

부서 테이블이 계층적 관계 (조직도나 메뉴)를 관리할때 사용

SELECT e1.empno, e1.ENAME, e2.empno, e2.ename manager
FROM EMP e1, EMP e2
WHERE e1.mgr = e2.empno;

그런데, 결과가 13건이다.

즉, 사장인 KING 이 조회되지 않는다.

 

이걸 해결하려면, OUTER 조인을 사용해야 함.  

OUTER 조인을 하려면 '(+)' 기호를 사용하고, WHERE 절의 데이터가 비어있는 쪽에 '(+)' 를 붙인다.

===> EMPNO 가 MGR 필드보다 많으니 EMPNO 쪽에 붙임.

===> 데이터가 부족한 쪽에 (+) 기호를 기술한다.

 

SELECT e1.empno, e1.ENAME, e2.empno, e2.ename manager
FROM EMP e1, EMP e2
WHERE e1.mgr = e2.empno(+);

오라클은 Left, Right 구분이 없다. 대신 (+) 를 사용한다.

 

어느쪽이 기준이냐.  기준이 되는것을 이름을 붙여서 Left Outer Join 이라고 함.

 

ANSI SQL 로 바꾸는 방법은

1. FROM 절의  콤마(,)를 JOIN 으로

2. (+)는 OUTER로

3. 기준이 되는 방향을 OUTER 앞에 붙여서 LEFT

4. WHERE 는 ON 으로 바꿈.

 

SELECT e1.empno, e1.ENAME, e2.empno, e2.ename manager
FROM EMP e1 LEFT OUTER JOIN EMP e2
ON e1.mgr = e2.empno;

 

 

 

 

728x90
반응형

댓글