[24일차] SQL을 이용한 데이터 분석

isnotnull·2023년 12월 22일

JOIN

JOIN이란

SQL조인은두개혹은그이상의테이블들을공통필드를가지고머지하는데 사용된다. 이는 스타 스키마로 구성된 테이블들로 분산되어 있던 정보를 통합하는데 사용된다.

왼쪽 테이블을 LEFT라고 하고 오른쪽 테이블을 RIGHT이라고 하자. JOIN의 결과는 방식에 상관없이 양쪽의 필드를 모두 가진 새로운 테이블을 만들어내게 된다.

조인의 방식에 따라 다음 두 가지가 달라진다:
1. 어떤 레코드들이 선택되는지?
2. 어떤 필드들이 채워지는지?

JOIN 문법

SELECT A.*, B.*
FROM raw_data.table1 A
____ JOIN raw_data.table2 B ON A.key1 = B.key1 and A.key2 = B.key2 WHERE A.ts >= '2019-01-01';
INNER, FULL, LEFT, RIGHT, CROSS

밑줄친 곳에 들어갈 코드 : INNER, FULL, LEFT, RIGHT, CROSS

JOIN시 고려해야할 점

  • 먼저 중복 레코드가 없고 Primary Key의 uniqueness가 보장됨을 체크
    • 아주 중요함!!!
  • 조인하는 테이블들간의 관계를 명확하게 정의
    • One to one
      • 완전한 one to one: user_session_channel & session_timestamp
      • 한쪽이 부분집합이 되는 one to one: user_session_channel & session_transaction
    • One to many? (order vs order_items)
      • 이 경우 중복이 더 큰 문제됨 -> 증폭!!
    • Many to one?
      • 방향만 바꾸면 One to many로 보는 것과 사실상 동일.
    • Many to many?
      • 이런 경우는 많지 않으며 이는 one to one이나 one to many로 바꾸는 것이 가능하다면 변환하여 조인하는 것이 덜 위험
  • 어느 테이블을 베이스로 잡을지 (From에 사용할지) 결정해야함

다양한 종류의 JOIN

JOIN의 종류

  • INNER JOIN
  • LEFT JOIN
  • RIGHT JOIN
  • FULL OUTER JOIN
  • SELF JOIN
  • CROSS JOIN

INNER JOIN

  1. 양쪽 테이블에서 매치가 되는 레코드들만 리턴함
  2. 양쪽 테이블의 필드가 모두 채워진 상태로 리턴됨

LEFT JOIN

  1. 왼쪽 테이블(Base)의 모든 레코드들을 리턴함
  2. 오른쪽 테이블의 필드는 왼쪽 레코드와 매칭되는 경우에만 채워진 상태로 리턴됨

FULL JOIN

  1. 왼쪽 테이블과 오른쪽 테이블의 모든 레코드들을 리턴함
  2. 매칭되는 경우에만 양쪽 테이블들의 모든 필드들이 채워진 상태로 리턴됨

CROSS JOIN

  1. 왼쪽 테이블과 오른쪽 테이블의 모든 레코드들의 조합을 리턴함

SELF JOIN

  1. 동일한 테이블을 alias를 달리해서 자기 자신과 조인함

이 글에서 소개된 내용은 프로그래머스 데이터분석1기에서 진행된 한기용 강사님의 온라인 강의를 참조하여 작성되었습니다.

0개의 댓글