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;
'DB > ORACLE' 카테고리의 다른 글
CTAS 를 활용한 테이블 생성(서브 쿼리를 활용한 방법), INNER JOIN, FULL OUTER JOIN(ANSI SQL에서만 가능) (0) | 2022.12.23 |
---|---|
Outer Join (0) | 2022.12.23 |
DBeaver 실행 계획, 쿼리 수행 시간 확인 (0) | 2022.12.21 |
UNION 과 UNION ALL (0) | 2022.12.21 |
문제 : emp 테이블의 부서별 sal 의 합을 구해라 (0) | 2022.12.21 |
댓글