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

이원진·2023년 5월 11일
0

데브코스

목록 보기
24/54
post-thumbnail
post-custom-banner

학습 내용


  1. JOIN 소개

  2. 다양한 종류의 JOIN

  3. 실습

1. JOIN 소개


  • JOIN이란?

    • 두 개 이상의 테이블을 공통 필드를 사용해 merge하는 것

    • star schema로 구성된 테이블에 분산되었던 정보 통합

  • 다양한 종류의 조인

    • INNER JOIN: 두 테이블에 공통으로 존재하는 레코드만 JOIN

    • FULL (OUTER) JOIN: UNION과 같은 기능으로, 두 테이블의 모든 레코드를 사용해 JOIN

    • CROSS JOIN: 두 테이블의 레코드로 만들 수 있는 모든 조합 생성

    • LEFT (OUTER) JOIN: LEFT 테이블의 레코드를 기준으로 JOIN

    • RIGHT (OUTER) JOIN: RIGHT 테이블의 레코드를 기준으로 JOIN

    • SELF JOIN: 같은 테이블을 JOIN

  • JOIN 문법

    SELECT left.*, right.*
    FROM table1 left
    ___ JOIN table2 right ON left.key = right.key
    WHERE left.ts >= "2019-01-01";

  • JOIN 시 고려할 점

    • 레코드 중복이 없고, Primary key uniqueness가 보장되는지 체크

    • 조인하는 테이블 간의 관계를 명확하게 정의

      • 1 : 1

      • 1 : N

      • N : 1

      • N : M

    • 어느 테이블을 LEFT로 사용할 지 결정


2. 다양한 종류의 JOIN


  • 사용할 2개의 테이블
    • raw_data.Vital: 환자의 체중 데이터


    • raw_data.Alert: 환자의 현재 체중과 이전 체중 정보를 비교해 문제 있을 경우 경고


  • INNER JOIN
    SELECT * FROM raw_data.Vital v
    JOIN raw_data.Alert a
    ON v.vitalId = a.vitalId


  • LEFT JOIN
    SELECT * FROM raw_data.Vital v
    LEFT 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
    SELECT * FROM raw_data.Vital v1
    JOIN raw_data.Vital v2
    ON v1.vitalId = v2.vitalId

3. 실습


  • BOOLEAN(True, False) 타입 처리

    • flag IS True == flag = True

    • flag IS True != flag IS NOT False

      • 전자는 NULL일 경우 거짓, 후자는 NULL일 경우 참

  • NULL 비교

    • NULL 비교는 반드시 부등호가 아닌 IS, IS NOT 사용
      • 부등호 사용 시 잘못된 결과 반환

  • NULLIF

    • 0으로 나눌 경우 에러가 발생하는 것을 방지하기 위해 사용

    • NULL이 포함된 사칙연산의 결과는 NULL

  • COALESCE

    • NULL값을 다른 값으로 바꿔주는 함수

    • COALESCE(exp1, exp2, exp3, ...)

      • exp1부터 인자를 검사해 NULL이 아닌 값이 나오면 해당 값을 반환

      • 모든 인자의 값이 NULL이라면 NULL 반환

        -- value가 NULL인 경우, 0을 반환
        SELECT value, COALESCE(value, 0)
        FROM table

  • 예약어, 공백을 큰따옴표로 감싸면 필드 이름으로 사용 가능하지만, 권장 X


메모



post-custom-banner

0개의 댓글