본문 바로가기
Database

[Oracle] LEFT JOIN과 LEFT OUTER JOIN은 뭐가 다를까?

by Davidev 2023. 8. 2.
반응형

 

LEFT  JOIN  =  LEFT  OUTER  JOIN
RIGHT  JOIN  =  RIGHT  OUTER  JOIN

 

 

 

 

궁금증 발동

 

JOIN INNER  JOIN완전히 같은 것이라는 사실을 알게 되고... (2년차 SM의 눈물.. 곧 3년차인데..)

 

 

 

2023.08.02 - [Database] - [Oracle] JOIN과 INNER JOIN은 뭐가 다를까?

 

[Oracle] JOIN과 INNER JOIN은 뭐가 다를까?

JOIN = INNER JOIN 궁금증 발동 실무에서 현재 운영중인 서비스의 쿼리문을 살펴보는 중 문득 " JOIN " 이 눈에 들어왔다. 운영되는 서비스 내 사용중인 JOIN의 종류는 아래와 같다. JOIN / INNER JOIN / LEFT JOI

davidev-wiki.tistory.com

 

 

 

LEFT  JOINLEFT  OUTER  JOIN은 또 무엇이란 말인가..

 

RIGHT  JOIN / RIGHT  OUTER  JOIN 역시 

 

LEFT JOIN - LEFT OUTER JOIN 과 같은 관계일 것으로 보이니

 

정리하는 김에 다 같이 알아보기로 했다.

 

 


 

LEFT  JOIN  쿼리문 실행

 

LEFT JOIN 키워드 사용 예
SELECT *
FROM        DMS_ADMIN D         	-- 기준 테이블 : 행(= 레코드 또는 튜플) : 39 개
LEFT JOIN   PSM_ADMIN P         	-- 왼쪽으로 붙여지는 테이블
ON          D.ADMIN_ID = P.ADMIN_ID;

 

 

 

실행 결과 : 왼쪽(LEFT) 테이블이 39개의 행을 가지고 있기 때문인지 39개의 행을 반환한다.

 

여기에서 중요한 것은 기준 행은 39개이지만, 

 

테이블 D와 테이블 P 의 '공통된 ID를 가진 데이터' 는 17개 밖에 없다는 것이다.

 

 

 

아래 이미지에서 녹색 영역은 JOIN 이 가능한 공통된 데이터이다.

 

흰색 영역도 기준 테이블이기 때문에 39개 행이 전체가 조회가 되어야 하는데,

 

테이블 P에 공통된 데이터가 없는 경우 균형을 맞추기 위해

 

노란색 영역처럼 빈 행을 만들어주고 null 값을 넣어서 39개 행을 만들어 보여주게 된다.

 

 

 

 

 

위 예제를 실행하고 살펴보면 LEFT JOIN은 간단하게 정리할 수 있을 것 같다.

 

 

1. 기준 행(본문 예제에서는 39개 행) 은 그대로 보존하면서

 

2. 'LEFT JOIN ' 키워드 뒤에 나오는 테이블을 '왼쪽으로 붙여준다.' 

 

3. 이 때 공통된 데이터 행 개수(17개)가 기준 행의 개수(39개)에 못미친다면 빈칸(null)으로 채워준다. 

 

 

=> 똑같은게 없으면 왼쪽 기준 행에 맞춰서 눈치껏 빈칸 만들어서 맞춰준다.

 

 


 

 

LEFT OUTER JOIN 쿼리문 실행
SELECT *
FROM        DMS_ADMIN D         	-- 기준 테이블 : 행(= 레코드 또는 튜플) : 39 개
LEFT OUTER JOIN   PSM_ADMIN P         	-- 왼쪽으로 붙여지는 테이블
ON          D.ADMIN_ID = P.ADMIN_ID;

 

실행 결과 >>>  : LEFT  JOIN 과 동일한 결과가 나온다.

 

 

 


 

RIGHT JOIN 쿼리문 실행

 

RIGHT JOIN 키워드 사용 예
SELECT     *
FROM       DMS_ADMIN D              -- 기준 테이블 : 행(= 레코드 또는 튜플) : 39 개
RIGHT JOIN PSM_ADMIN P              -- 왼쪽으로 붙여지는 테이블 : 행(= 레코드 또는 튜플) : 58 개
ON         D.ADMIN_ID = P.ADMIN_ID;

 

 

실행 결과

 

위 결과를 보면 LEFT JOIN 과 대칭되는 형태로 데이터가 나오게 된다.

 

기본적으로 FROM 절 뒤에 나오는 테이블이 기준 테이블로 세팅되지만,

 

RIGHT  JOIN  키워드는 해당 키워드 뒤에 나오는 테이블(=붙이는 테이블)을 기준 테이블로 만들어 버린다.

 

 

 

붙여지는 형태는 LEFT JOIN과 똑같이 오른쪽에 테이블이 붙여지는 형태이지만,

 

데이터가 만들어지는 형태는 오른쪽에 붙인 테이블을 기준으로 총 58개의 행이 만들어지고,

 

39개 뿐인 테이블 D에서는 균형을 맞추기 위해 한 쪽에만 존재한 19개의 데이터에 빈 행을 만들어 붙여 버린다.

 

 

 

그림으로 도식화하면 아래와 같은 모습이다.

 

 

 

LEFT JOIN 은 왼쪽 테이블을 기준 테이블로, RIGHT JOIN 은 오른쪽 테이블을 기준 테이블로 만든다.

 

기준 테이블이 가진 모든 행을 출력하고 한 쪽에만 존재하는 데이터가 있으면 눈치껏 빈칸을 넣어서 null 값을 넣는다. 

 

 

 


 

RIGHT OUTER JOIN 쿼리문 실행

 

RIGHT OUTER JOIN 쿼리문 실행
SELECT     *
FROM       DMS_ADMIN D              -- 기준 테이블 : 행(= 레코드 또는 튜플) : 39 개
RIGHT OUTER JOIN PSM_ADMIN P              -- 왼쪽으로 붙여지는 테이블 : 행(= 레코드 또는 튜플) : 58 개
ON         D.ADMIN_ID = P.ADMIN_ID;

 

실행 결과 >>>  : RIGHT  JOIN 과 동일한 결과가 나온다.

 

 


 

Chat GPT 선생님께 문의

 

 

 

 

 


 

 

정리

 

 

LEFT JOIN  ==  LEFT  OUTER  JOIN

RIGHT JOIN  ==  RIGHT  OUTER  JOIN

 

 

명확성, 가독성을 위해 OUTER 키워드를 명시적으로 넣어주는 것이 좋겠지만,

 

OUTER 키워드를 생략하는 것이 일반적이고, ANSI SQL 표준이라고 하니

 

지금까지 그래왔던 것 처럼 OUTER 키워드는 다시는 쓰지 말아야 겠다(?)

 

 

 


반응형

댓글