[프로그래머스] 데브코스 데이터엔지니어링 TIL Day 24

주재민·2023년 11월 16일
0
post-thumbnail

📖 학습주제

데이터 웨어하우스와 SQL 기본에 대해 배우고 이를 바탕으로 데이터 분석에 대해 학습 (4)


JOIN

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

종류

예제 테이블

INNER JOIN

  • 양쪽 테이블에서 매치가 되는 레코드들만 리턴함
  • 양쪽 테이블의 필드가 모두 채워진 상태로 리턴됨
  • JOIN의 디폴트 값임
SELECT * FROM raw_data.Vital v
JOIN raw_data.Alert a ON v.vitalID = a.vitalID;

LEFT/RIGHT JOIN

  • 왼(오른)쪽 테이블(Base)의 모든 레코드들을 리턴함
  • 오른(왼)쪽 테이블의 필드는 왼(오른)쪽 레코드와 매칭되는 경우에만 채워진 상태로 리턴됨
SELECT * FROM raw_data.Vital v
LEFT(RIGHT) JOIN raw_data.Alert a ON v.vitalID = a.vitalID;

FULL JOIN

  • 왼쪽 테이블과 오른쪽 테이블의 모든 레코드들을 리턴함
  • 매칭되는 경우에만 양쪽 테이블들의 모든 필드들이 채워진 상태로 리턴됨
SELECT * FROM raw_data.Vital v
FULL JOIN raw_data.Alert a ON v.vitalID = a.vitalID;

CROSS JOIN

  • 왼쪽 테이블과 오른쪽 테이블의 모든 레코드들의 조합을 리턴함
SELECT * FROM raw_data.Vital v CROSS JOIN raw_data.Alert a;

SELF JOIN

  • 동일한 테이블을 alias를 달리해서 자기 자신과 조인함
SELECT * FROM raw_data.Vital v1
JOIN raw_data.Vital v2 ON v1.vitalID = v2.vitalID;

유의할 점

  • 중복 레코드가 없고 Primary Key의 uniqueness가 보장됨을 체크(중요)
  • 조인하는 테이블들간의 관계를 명확하게 정의
    - One to one
    - One to many
    - Many to one
    - Many to many
  • 어느 테이블을 베이스로 잡을지 (From에 사용할지) 결정

NULL에 대해

BOOLEAN 타입 처리

  • 다음 2개는 동일한 표현
    - flag = True
    - flag is True

  • 다음 2개는 항상 동일하진 않음(NULL의 존재)
    - flag = False
    - flag is not True

NULL 비교

NULL 비교는 항상 IS 혹은 IS NOT으로 수행

NULLIF

0으로 나누는 경우 divide by 0 에러 발생
-> NULLIF를 사용하여 0을 NULL로 변경

field1/NULLIF(field2, 0)

COALESCE

  • NULL 값을 다른 값으로 바꿔주는 함수
  • COALESCE(exp1, exp2, exp3, …)
    - exp1부터 인자를 하나씩 살펴서 NULL이 아닌 값이 나오면 그걸 리턴
    - 모두 NULL이면 최종적으로 NULL을 리턴
SELECT
 value,
 COALESCE(value, 0) -- value가 NULL이면 0을 리턴
FROM raw_data.count_test;

0개의 댓글