본문 바로가기
IT ▶/Data

[SQL기초] OUTER JOIN 개념 및 JOIN 사용방법

by 오프로 2019. 11. 13.

 

 

 

안녕하세요.

 

OUTER JOIN 에 대해 알아보겠습니다.

 

 

** OUTER JOIN

 

 

INNER 조인과 반대로 여러 테이블을 같이 조합해서 조회하고자 할 때 사용

 

 

한쪽 테이블에는 데이터가 없어도 한쪽 테이블에는 있으면 데이터가 있는 테이블 기준으로 조회됩니다.

 

 

다만 이 JOIN 방식은 데이터가 있는 테이블 기준으로 Full Scan을 처리하여,

DB 성능에 좋지 않아 잘 사용해야 한다고 합니다.

 

 

Oracle Outer Join

SELECT a.name, b.name
FROM LIVERPOOL a, MANCITY b
WHERE a.playerno = b.playerno(+);

 

LIVERPOOL에는 있지만 MANCITY 선수번호가 없는 경우에도

전체 선수를 조회하기 위해서 MANCITY playerno (+)를 붙여줍니다.

 

 

ANSI Outer Join 으로 표현하면,

 

ON 조건절 기준으로 데이터가 있는 쪽 기준으로

 

왼쪽을 기준으로 할거면 LEFT OUTER JOIN 구문, 오른쪽을 기준으로 할거면 RIGHT OUTER JOIN을 사용하시면 됩니다.

 

SELECT a.name, b.name
FROM LIVERPOOL a LEFT OUTER JOIN MANCITY b
ON a.playerno = b.playerno;

 

 

리버풀 쪽에 없는 선수까지 명단을 조회하고자 할 때 는 반대로 RIGHT OUTER JOIN 구문을 사용하면 됩니다.

 

 

ORACLE OUTER JOIN 구문

 

SELECT a.name, b.name
FROM LIVERPOOL a, MANCITY b
WHERE a.playerno(+) = b.playerno;

 

 

ANSI OUTER JOIN 구문

 

SELECT a.name, b.name
FROM LIVERPOOL a RIGHT OUTER JOIN MANCITY b
ON a.playerno = b.playerno;

 

 

 

양 쪽 팀에서 한쪽에만 선수번호가 있더라도 양쪽의 선수명단을 다 조회하고자 하면

 

ORACLE OUTER JOIN 구문은 UNION으로 합쳐서 조회하고,

 

ANSI OUTER JOIN 구문의 경우는 FULL OUTER JOIN 구문을 사용합니다.

 

 

ORACLE OUTER JOIN 구문

 

SELECT a.name, b.name
FROM LIVERPOOL a, MANCITY b
WHERE a.playerno(+) = b.playerno 

UNION 

SELECT a.name, b.name
FROM LIVERPOOL a, MANCITY b
WHERE a.playerno = b.playerno(+)
;

 

ANSI FULL OUTER JOIN 구문

 

SELECT a.name, b.name
FROM LIVERPOOL a FULL OUTER JOIN MANCITY b
ON a.playerno = b.playerno;

 

 

아래는 INNER JOIN 참고하시기 바랍니다.!!

 

 

https://lovefor-you.tistory.com/188

 

데이터베이스 입문용 SQL JOIN 개념 및 JOIN 사용방법

안녕하세요.!!! 데이터베이스 SQL 쿼리에서 JOIN 문법에 대해서 알아보겠습니다. 데이터베이스 쿼리를 사용하다보면 여러 table에서 데이터를 조회하고 싶은 경우가 있습니다. 테이블 간에는 동일한 컬럼과 데이터..

lovefor-you.tistory.com

 

 

저도 필요해서 찾아봐서 정리하였는데 도움이 되셨으면 해서 작성하였습니다~!

 

 

조금이나마 도움이 되셨으면 좋아요 하트♥나 구독 부탁드립니다~!


파이팅 하시고 좋은 하루 되세요!!

 

 

728x90
300x250