[MySQL] JOIN 이해하기

AI Scientist를 목표로!·2023년 1월 1일
0

데이터 예시

  • 테이블명 : FIRST_HALF

  • 테이블명 : JULY

SHIPMENT_ID를 기준으로 예시를 작성할 예정

  • FIRST_HALF는 101,102,103,104,105,106,109

  • JULY는 101,102,103,104,105,106,109,209

  • 즉, JULY 테이블이 209의 값이 하나 더 존재

Inner JOIN

  • 가장 많이 사용되는 JOIN 구문 중 하나
  • 2개의 테이블에 모두 매치되는 값을 가진 rows를 Return
SELECT *
FROM FIRST_HALF
INNER JOIN JULY ON FIRST_HALF.SHIPMENT_ID = JULY.SHIPMENT_ID     
ORDER BY FIRST_HALF.SHIPMENT_ID

  • 209를 제외하고 겹치는 데이터들이 JOIN되어 있음

LEFT (OUTER) JOIN

  • JOIN 수행 시 먼저 표기된 좌측 테이블에 해당하는 데이터를 먼저 읽으 후, 우측 테이블에서 JOIN의 대상 데이터를 읽어오는 과정

  • 우측 테이블에서 만족하는 데이터가 없는 경우 NULL값으로 대체

SELECT *
FROM FIRST_HALF
LEFT JOIN JULY ON FIRST_HALF.SHIPMENT_ID = JULY.SHIPMENT_ID     
ORDER BY FIRST_HALF.SHIPMENT_ID

해당 결과값은 위 INNER JOIN과 결과값이 동일하다

왜냐하면 위 코드에서 LFET에 해당하는 테이블은 FIRST_HALF이다

FIRST_HALF를 기준으로 먼저 데이터를 읽고 RIGHT에 해당하는 JULY를 읽기 때문에 209의 데이터가 노출되지 않는다.


RIGHT (OUTER) JOIN

  • LEFT JOIN에서 방향만 바꾼것

  • 우측 테이블을 먼저 읽고 좌측 테이블에서 만족하는 값이 없다면 NULL로 대체

SELECT *
FROM FIRST_HALF
RIGHT JOIN JULY ON FIRST_HALF.SHIPMENT_ID = JULY.SHIPMENT_ID     
ORDER BY FIRST_HALF.SHIPMENT_ID

  • 209에 대한 정보는 좌측 테이블(FIRST_HALF)에 없기 때문에 NULL로 표기

FULL (OUTER) JOIN

  • Full Join은 지원하지 않는 DB가 많기 때문에, UNION함수를 사용해서 Full Join을 대체하여 사용하는 경우가 많음

  • 양쪽 테이블에 있는 데이터 중 빈 값은 모두 Null로 채운 뒤 모든 데이터를 보여줌


CROSS (CARTESIAN) JOIN

  • 2개 테이블 데이터의 모든 조합을 불러옴

  • 해당 결과의 개수는 두 테이블 행의 개수를 곱한 값과 동일

SELECT (조회 컬럼)
FROM (테이블 명)
CROSS JOIN Orders ON (조인 조건)

ON절을 지정하기도 하지만 않하는 경우가 더 많음

profile
딥러닝 지식의 백지에서 깜지까지

0개의 댓글