본문 바로가기

Oracle/SQL

SQL Oracle Join - Outer join 여러 테이블 조인

equi 조인으로 볼 수 없는 데이터 값을 출력 

이름, 부서위치 출력 그리고 부서위치쪽에 DEPT 테이블에는 존재하는데 혹시 출력 안된 부서위치가 있는지 찾아보시오.

select e.ename, d.loc
from emp e, dept d 
where e.deptno = d.deptno ;

 

'BOSTON' 이 출력 되지 않는다.

emp 테이블에 부서번호 40 번이 없어서 조인이 전부 다 실행되지 않았기 때문에 BOSTON이 출력되지 않은것 입니다.

따라서 위의 조인결과에서는 BOSTON 이 없다 생각할 수 있으나, 실제로는 BOSTON 의 위치는 존재하나 사원만 없을 뿐이다.

그렇다면 조인 되지않은 결과도 출력 하려면 OUTER 조인을 사용해아한다.


select e.ename, d.loc 
from emp e, dept d
where e.deptno (+) = d.deptno ;

 

이 OUTER JOIN 의 (+) 의 위치는 , emp 와 detp 결과중 결과가 모자라는 쪽에 붙여준다.

emp table 에 부서번호 40 번이 없어서 boston 이 출력 되지 않은것 이므로 e.dept 에 (+) 를 붙여준다.


만약 데이터가 방대해서 어디 쪽이 모자란지 확인 할 수 없을때에는 ?

select distinct deptno from dept;

select distinct deptno from emp;

쿼리로 확인을 한다


양쪽에 outer join 은 쓰지 못한다 (+)

뒤에서 full outer join 배울것임

문제 298 부서위치, 부서위치별 토탈월급 출력하며 조인안된 boston 도 출력

select d.loc, sum(e.sal) 
from emp e, dept d 
where e.deptno (+) = d.deptno
group by d.loc;