본문 바로가기
Dev/Database

SQL - JOIN 조인 2 (Outer Join, Self Join)

by vellahw 2022. 8. 31.

(Oracle DB 사용 / 툴: SQL Developer / scott 계정 사용) 

 

 

 

3. Outer Join

행이 조인 조건에 만족하지 않을 경우 그 행은 결과에 나타나지 않는데,

조인 조건에 만족하지 않는 행들도 나타내기 위해 사용된다.

(+) 기호를 조인 조건에서 정보가 부족한 칼럼 명 뒤에 기술하여 사용한다.

 

ex) 사원 테이블과 부서 테이블을 조인하여 사원 이름과 부서 번호, 부서명을 출력하기

select e.ename, d.deptno, d.dname
from emp em, dept d
where e.deptn = d.deptno
order by d.deptno;

(* order by : 오름차순 정렬)

부서 테이블을 보면 부서 번호는 40번까지 존재 하지만 조인 결과에는 출력 되지 않는다.

이는 사원 테이블의 부서 번호에는 40번이 존재하지 않기 때문인데,

40번 부서도 출력 되도록 하려면 부서 번호가 없는 e.deptno 뒤에 (+) 기호를 사용하여 Outer Join을 사용한다.

select e.ename, d.deptno, d.dname
from emp em, dept d
where e.deptno(+) = d.deptno
order by d.deptno;

 

 

 

4. Self Join

자기 자신과 조인을 맺는 것을 말한다.

from 절 다음에 동일한 테이블 명을 두 번 기술하고 where 절에도 조인 조건을 주어야 하는데,

이때 서로 다른 테이블인 것처럼 인식할 수 있도록 하기 위해 별칭을 사용한다.

 

ex-1) 특정 사원을 담당하는 매니저 사원의 이름을 출력하기

1. 각 사원의 mgr 확인

select ename, mgr
from emp;

 

2. 하나의 테이블을 두 개의 테이블인 것처럼 사용하려면

emp 테이블에 WORK(사원 테이블)와 MANAGER(매니저 테이블)로 별칭을 부여한다.

select work.ename, manager.ename
from emp work, emp manager
where work.mgr = manager.empno;

emp 테이블에서 mgr과 empno가 같은 사원과 담당자끼리 연결됨

 

ex-2) 사원의 이름과 그의 매니저 이름을 출력하기

select work.ename || '의 매니저는' || manager.ename || '이다.'
as '그 사원의 매니저'
from emp work, emp manager
where work.mgr = manager.empno;

* || <-기호로 문자열을 연결한다

 

'Dev > Database' 카테고리의 다른 글

JDBC 프로그래밍  (0) 2022.09.06
데이터베이스 프로그래밍  (0) 2022.09.05
SQL - JOIN 조인 1 (Equi Join, Non-Equi Join )  (0) 2022.08.30
SQL - 그룹 함수 2 (group by문과 having 조건)  (0) 2022.08.30
SQL - 그룹 함수 1  (0) 2022.08.30

댓글