Devleop/MySQL

[MySQL] JOIN : 테이블 합치기 (INNER, LEFT, RIGHT, FULL OUTER)

hwajae 2023. 5. 6. 19:11
반응형

JOIN 이란?

SQL 이용하여 두 개의 테이블을 연결해 데이터 조회하는 것을 JOIN이라고 한다. 두 테이블 연결 작업이므로 이를 위한 연결고리가 필요하다. JOIN 칼럼은 두 테이블에서 같은 값을 가진 칼럼을 의미한다.

CITY, COUNTRY 테이블의 조인

JOIN의 특징을 간단하게 살펴보고 넘어가려고 한다. 

  1. JOIN 테이블은 서로 값은 값을 가진 칼럼이 존재해야 한다.
  2. 2개 이상의 테이블 JOIN 가능하다.
  3. JOIN 할 때 테이블에 대한 별칭을 사용한다.
  4. JOIN 시 조건이 필요하다

 

JOIN의 종류

JOIN 종류

막상 사진만 보면 이해하기 어려워 보일 수 있다. 하지만 학창 시절에 배운 집합을 떠올리면 이해하는데 도움이 될 것 같다. 하나씩 살펴보면서 이해해보려고 한다.

INNER JOIN

INNER JOIN

A 테이블과 B 테이블의 교집합을 생각하면 된다. 기본적인 SQL 쿼리 형태는 다음과 같다.

(A ∩ B)

SELECT *
FROM A AS a
JOIN B AS b
ON a.KEY = b.KEY
;

INNER JOIN : Let's get it SQL 프로그래밍 발췌

A, B 각각 테이블 1과 2 그리고 KEY를 COL1이라 보면 된다. 각 테이블에서 JOIN KEY COL1 값이 존재하는 데이터만 가져온 것을 확인할 수 있다.

LEFT OUTER JOIN

LEFT OUTER JOIN

A, B 테이블의 교집합과 (A - B) 테이블(차집합)의 합집합이라고 보면 된다.

( (A ∩ B) ∪ (A - B) )

SELECT *
FROM A AS a
LEFT OUTER JOIN B AS b
ON a.KEY = b.KEY
;

LEFT OUTER JOIN : Let's get it SQL 프로그래밍 발췌

COL1 값이 1, 2, 3인 경우는 교집합에 해당하고 나머지 5, 6은 차집합에 해당하는 값이다. 빈칸은 NULL 값이라고 보면 된다.

A-B

SELECT *
FROM A AS a
LEFT OUTER JOIN B AS b
ON a.KEY = b.KEY
WHERE b.KEY IS NULL
;

해당 이미지처럼 데이터를 뽑아 오고 싶다면 LEFT OUTER JOIN 후 위 결과 값처럼 b key 값이 NULL인 부분을 가져오면 얻을 수 있다.

RIGHT OUTER JOIN

RIGHT OUTER JOIN

A, B 테이블의 교집합과 (B - A) 테이블(차집합)의 합집합이라고 보면 된다.

 ( (A ∩ B) ∪ (B - A) )

SELECT *
FROM A AS a
RIGHT OUTER JOIN B AS b
ON a.KEY = b.KEY
;

RIGHT OUTER JOIN : Let's get it SQL 프로그래밍 발췌

마찬가지로 COL1 값이 1,2,3 교집합에 해당되고 나머지 4는 차집합에 해당되는 부분 빈칸은 NULL

B-A

SELECT *
FROM A AS a
RIGHT OUTER JOIN B AS b
ON a.KEY = b.KEY
WHERE a.KEY IS NULL
;

해당 이미지처럼 데이터를 뽑아 오고 싶다면 RIGHT OUTER JOIN 후 위 결과 값처럼 a key 값이 NULL인 부분을 가져오면 얻을 수 있다.

 

FULL OUTER JOIN

FULL OUTER JOIN

A, B 테이블의 합집합으로 이해하면 된다.

(A B) 

SELECT *
FROM A AS a
FULL OUTER JOIN B AS b
ON a.KEY = b.KEY
;

결과 값은 모든 행들을 출력하고 a.KEY = b.KEY 조건에 만족하지 못하는 행들은 LEFT, RIGHT처럼 전부 NULL값을 가지게 된다. 

위 결과 값대로 데이터를 얻고 싶다면

((A  B)  - (A ∩ B))

SELECT *
FROM A AS a
FULL OUTER JOIN B AS b
ON a.KEY = b.KEY
WHERE a.KEY IS NULL OR b.KEY IS NULL
;

a, b KEY 값들이 NULL 인 부분들만 추출해 주면 된다.

 

이상으로 JOIN 종류에 대해서 알아봤다. 집합만 잘 이해하고 있다면 문제없이 이해할 수 있을 거 같다.

 

반응형