JOIN
두 개 혹은 그 이상의 테이블들을 공통 필드를 가지고 merge하는데 사용
- 스타 스키마로 구성된 테이블들로 분산되어 있떤 정보를 통합하는데 사용
- 대부분 LEFT JOIN과 INNER JOIN만 사용
SELECT A.*, B.*
FROM raw_data.table1 A
(INNER,FULL,LEFT,RIGHT,CROSS) JOIN raw_table2 B ON A.key1 = B.key1 and A.key2 = B.key2
WHERE A.ts >= '2019-01-01';
JOIN시 고려 사항
- 중복 레코드가 없고, Priamry Key uniqueness가 보장되는지 확인
- 조인하는 테이블 간의 관계를 명확하게 정의
: one to one / one to many / many to one / many to many
- 어느 테이블을 베이스로 할지 결정
INNER JOIN
LEFT JOIN
RIGHT JOIN
FULL JOIN
- LEFT ∪ RIGHT
- 쓸 일이 아주 가끔 있음
CROSS JOIN
- LEFT와 RIGHT의 모든 레코드들의 조합을 리턴
EX) 3개의 레코드 테이블 A CROSS JOIN 4개의 레코드 테이블 B → 총 3*4개 레코드 추출
SELF JOIN
BOOLEAN 타입 처리
- 종류 : True, False, NULL
- 다음 2개는 동일한 표현
- 다음 2개는 동일하지 않은 표현
- flag is True
- flag is not False
NULL 비교
- NULL비교는 항상 IS 혹은 IS NOT으로 수행
- = 혹은 != 혹은 <>으로 수행하면 잘못된 결과 출력됨
NULLIF
- NULLIF(value,0) : value가 0이면 NULL 리턴
COALESCE
- NULL값을 다른 값으로 바꿔주는 함수
- COALESCE(exp1, exp2, exp3, ...)
- exp1부터 인자를 하나씩 살펴서 NULL이 아닌 값이 나오면 그걸 리턴
- 끝까지 갔는데도 모두 NULL이면 최종적으로 NULL리턴
SELECT
value,
COALESCE(value,0)
FROM raw_data.count_test;