어 나 갱수.

[DB] INNER 조인 & OUTER조인 🤚 본문

DB

[DB] INNER 조인 & OUTER조인 🤚

김경수 2024. 2. 29. 15:54
728x90

JOIN

JOIN의 종류는 크게 INNER JOIN OUTER JOIN으로 나뉘는데 거기서도 OUTER조인은 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN으로 구분할 수 있습니다.

 

INNER 조인은 어떤 테이블을 먼저 읽어도 결과가 같기 때문에 MySQL 옵티마이저가 JOIN의 순서를 조절해서 다양한 방법으로 최적화를 수행할 수 있습니다. 하지만 OUTER 조인은 어떤 테이블을 먼저 읽느냐에 따라 결과가 달라지기 때문에 조인 순서를 MySQL 옵티마이저가 선택할 수 없습니다.

INNER JOIN

A테이블 B테이블 이렇게 두개의 테이블이 있다고 가정하면, INNER JOIN은 A와 B의 교집합을 말합니다.

간단하게 말하면 서로 연관된 내용만 검색하는 조인입니다.

A    B
-    -
1    3
2    4
3    5
4    6

 

1,2는 A테이블에만 있고 3,4는 A와B 테이블 모두에 있고 5,6은 B테이블에만 존재합니다.

수행

A와B를 INNER JOIN을 수행하면 A와 B의 교집합을 반환하게 됩니다.

select * from a INNER JOIN b on a.a = b.b;
select a.*,b.*  from a,b where a.a = b.b;

a | b
--+--
3 | 3
4 | 4

OUTER JOIN

A테이블 B테이블 이렇게 두개의 테이블이 있다고 가정하면, OUTER JOIN은 A와 B의 합집합 말합니다.

OUTER JOIN은 크게 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN 이렇게 크게 3가지로 나누어집니다.

 

LEFT OUTER JOIN

left outer join은 left outer join을 기준으로 왼쪽에 있는 테이블에 있는 모든 열을 반환하고 오른쪽에 있는 테이블의 공통부분을 반환받게 됩니다.

select * from a LEFT OUTER JOIN b on a.a = b.b;
select a.*,b.*  from a,b where a.a = b.b(+);

a |  b
--+-----
1 | null
2 | null
3 |    3
4 |    4

 

b에서는 1,2 가 없기 때문에 null로 대체됩니다.

 

RIGHT OUTER JOIN

right outer join은 right outer join을 기준으로 오른쪽에 있는 테이블에 있는 모든 열을 반환하고 왼쪽에 있는 테이블의 공통부분을 반환하게 됩니다.

select * from a RIGHT OUTER JOIN b on a.a = b.b;
select a.*,b.*  from a,b where a.a(+) = b.b;

a    |  b
-----+----
3    |  3
4    |  4
null |  5
null |  6

 

a에서는 5,6이 없기 때문에 null로 대체됩니다.

FULL OUTER JOIN

full outer join을 하면 A와B의 합집합을 얻게 됩니다.

a, b테이블에서 각각 없는 부분은 null로 대체됩니다.

select * from a FULL OUTER JOIN b on a.a = b.b;

 a   |  b
-----+-----
   1 | null
   2 | null
   3 |    3
   4 |    4
null |    6
null |    5

Reference

728x90

'DB' 카테고리의 다른 글

[DB] Spring Boot에서 Redis Cache를 구현하기 😤  (0) 2024.07.09
[DB] Redis Cache 🔥  (0) 2024.07.08
[DB] 정규화란 ? 🐼  (1) 2024.02.04
[DB] 인덱스(Index)란? 😛  (1) 2024.01.31
[DB] DBCP 이란? 🫶  (0) 2024.01.28