📖 학습주제
데이터 웨어하우스와 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)
FROM raw_data.count_test;