카테고리 없음

Week 6 - 4

out_of_anjoong 2024. 4. 25. 17:06

JOIN

두 개 혹은 그 이상의 테이블들의 공통 필드를 가지고 머지하는데 사용됨.
스타 스키마로 구성된 테이블들로 분산되어 있던 정보를 통합.
왼쪽 테이블을 LEFT, 오른쪽 테이블을 RIGHT라고 함.

  • 먼저 중복 레코드가 없고 Primary Key의 uniqueness가 보장됨을 체크
  • 조인하는 테이블들 간의 관계를 명확하게 정의
    • one to one
      조인키(조인 필드)가 양 테이블에 한번씩 나오는 관계
    • one to many
      한 테이블엔 하나씩 있지만 다른 테이블엔 여러번
    • many to one
      방향만 바꾸면 one to many와 사실상 동일
    • many to many
      많지 않은 경우지만 one to one이나 one to many로 변환하여 조인(가능하면)
  • 어느 테이블을 베이스로 잡을 지 결정

 

  • INNER JOIN
    • 양쪽 테이블에서 매치가 되는 레코드들만 리턴함
    • 양쪽 테이블의 필드가 모두 채워진 상태로 리턴됨.
  • LEFT JOIN
    • 왼쪽 테이블의 모든 레코드들을 리턴함
    • 오른쪽 테이블의 필드는 왼쪽 레코드와 매칭되는 경우에만 채워진 상태로 리턴됨
  • FULL JOIN
    • 왼쪽 테이블과 오른쪽 테이블의 모든 레코드를 리턴함
    • 매칭되는 경우에만 양쪽 테이블들의 모든 필드들이 채워진 상태로 리턴됨.
  • CRISS JOIN(CARTESIAN JOIN)
    • 양쪽 테이블의 모든 레코드들의 조합
  • SELF JOIN
    • 동일한 테이블을 alias를 달리해서 자기 자신과 조인

BOOLEAN

  • True or False
    • flag = True, flag is True
  • IS TRUE vs IS NOT FALSE : TRUE이냐와 FALSE가 아니냐는 의미상은 같지만 결과는 다름(NULL 같이 FALSE 가 아닌 것 까지 고려되기 때문)

유용한 함수

  • NULLIF(A, B)
    A = B이면 NULL을 리턴 
  • COALESCE
    NULL 값을 다른 값으로 바꿔주는 함수(NULL 대신에 다른 백업값을 리턴해주는 함수)
    • COALESCE(exp1, exp2, exp3, ...)
      • exp1부터 인자를 하나씩 살펴서 NULL이 아닌 값이 나오면 그걸 리턴
      • 끝까지 갔는데도 모두 NULL이면 최종적으로 NULL을 리턴
         
  • ROUND(A ,2)
    A를 소숫점 2자리까지 반올림
  • minus(except)
    앞 셀렉트 결과문에서 뒤 셀렉트 결과문을 다 뺀 결과.(앞 셀렉트에는 있지만 뒤 셀렉트에는 없는 것만 결과로 나옴)
    만약 똑같다면 아무 것도 리턴이 안됨
select distinct sessionid from raw_data.session_timestamp
minus
select distinct sessionid from raw_data.user_session_channel
;