안녕하세요.
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
저도 필요해서 찾아봐서 정리하였는데 도움이 되셨으면 해서 작성하였습니다~!
조금이나마 도움이 되셨으면 좋아요 하트♥나 구독 부탁드립니다~!
파이팅 하시고 좋은 하루 되세요!!
'IT ▶ > Database' 카테고리의 다른 글
[데이터베이스 기초] 오라클 SQL 기본 개념 (SELECT, ORDER BY, NVL) (0) | 2019.12.15 |
---|---|
[Big Data] Introduction about Big Data (빅데이터 소개) (0) | 2019.11.29 |
[SQL 기초] ORACLE JOIN 동작 원리 (0) | 2019.11.13 |
[데이터베이스 SQL] 쿼리 JOIN 개념 및 JOIN 사용방법 (0) | 2019.11.12 |
[DB기초] SQL 쿼리 기본함수 정리 (INSTR, LPAD, RPAD, LTRIM) (0) | 2019.11.07 |