JOIN 소개
다양한 종류의 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로 사용할 지 결정
SELECT * FROM raw_data.Vital v
JOIN raw_data.Alert a
ON v.vitalId = a.vitalId
SELECT * FROM raw_data.Vital v
LEFT JOIN raw_data.Alert a
ON v.vitalId = a.vitalId
SELECT * FROM raw_data.Vital v
FULL JOIN raw_data.Alert a
ON v.vitalId = a.vitalId
SELECT * FROM raw_data.Vital v
CROSS JOIN raw_data.Alert a
SELECT * FROM raw_data.Vital v1
JOIN raw_data.Vital v2
ON v1.vitalId = v2.vitalId
BOOLEAN(True, False) 타입 처리
flag IS True
== flag = True
flag IS True
!= flag IS NOT False
NULL 비교
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