본문 바로가기
IT/ORACLE

[ORACLE] 오라클 Left outer join VS (+) 조인의 순서차이

by 베베야 2021. 5. 14.
728x90

이번 시간에는 Left outer join 사용법과 조인에 따른 방향성에 대해서 알아보겠습니다.
Left outer join은 오라클에서는 where절 컬럼에 (+)를 추가함으로써 사용이 가능한데요.
방향성이 다르기 때문에 햇갈릴 수 있습니다.

 

테이블 생성 및 데이터 입력

create table 부서
(  
    부서번호 int
   ,부서명 varchar2(20)
)

insert into 부서 values (1,'하나');
insert into 부서 values (2,'둘');
insert into 부서 values (3,'셋');
commit;

create table 사원
(  
    사번 int
    ,이름 varchar2(20)
    ,부서번호 int
)

insert into 사원 values (100,'하나',1);
insert into 사원 values (200,'둘',2);
insert into 사원 values (300,'셋',3);
insert into 사원 values (400,'넷','');
insert into 사원 values (500,'다섯','');
commit;

select * from 부서;

부서번호 부서명
1        하나
2        둘
3        셋

select * from 사원;

사번 이름 부서번호
100 하나  1
200 둘    2
300 셋    3
400 넷       
500 다섯  

 

 

1. 일반적인 inner join

(2개의 쿼리 결과는 동일)
select a.사번, a.이름, b.부서명
from 사원 a, 부서 B
where b.부서번호 = a.부서번호;

select a.사번, a.이름, b.부서명
from 사원 a, 부서 B
where a.부서번호 = b.부서번호;

사번 이름 부서명
100  하나 하나
200  둘   둘
300  셋   셋


2. (+)outer join - b.부서번호(+)

where 조건에 (+)가 없는 a.부서번호의 테이블인 "사원" 테이블 기준으로 left outer join이 진행됩니다.

select a.사번, a.이름, b.부서명
from 사원 a, 부서 B
where b.부서번호(+) = a.부서번호;

사번 이름 부서명
100  하나 하나
200  둘   둘
300  셋   셋
500  다섯
400  넷


3. (+)outer join a.부서번호(+)

where 조건에 (+)가 없는 b.부서번호의 테이블인 "부서" 테이블 기준으로 left outer join이 진행됩니다.

select a.사번, a.이름, b.부서명
from 사원 a, 부서 B
where b.부서번호 = a.부서번호(+);

사번 이름 부서명
100  하나 하나
200  둘   둘
300  셋   셋

 

 

4. left outer join

where절에 사용하는 (+)와 다르게 
from 절에서 명시적으로 left outer join 지정한 경우 on 절의 순서에는 상관없이 
from 절의 왼쪽에 위치한 테이블을 기준으로 left outer join이 진행됩니다.
(아래 2개의 쿼리 결과는 동일합니다)

select a.사번, a.이름, b.부서명
from 사원 a left outer join 부서 B
on b.부서번호 = a.부서번호;

select a.사번, a.이름, b.부서명
from 사원 a left outer join 부서 B
on a.부서번호 = b.부서번호;

사번 이름 부서명
100  하나 하나
200  둘   둘
300  셋   셋
500  다섯
400  넷

 

쿼리 파일 첨부

오라클 Left outer join VS (+) 조인의 순서차이.txt
0.00MB

 

반응형
그리드형

댓글