JOIN이란?
SQL 조인은 두 개 혹은 그 이상의 테이블들을 공통 필드를 가지고 머지하는데 사용된다. 이는 스타 스키마로 구성된 테이블들로 분산되어 있는 정보를 통합하는데 사용된다.
왼쪽 테이블을 LEFT라고 하고 오른쪽 테이블을 RIGHT라고 하자. JOIN의 결과는 방식에 상관없이 양쪽의 필드를 모두 가진 새로운 테이블을 만들어내게 된다. 조인의 방식에 따라 다음 두가지가 달라진다.
- 어떤 레코드들이 선택되는지?
- 어떤 필드들이 채워지는지?
→ 거의 LEFT JOIN과 INNER JOIN이 사용 된다.
JOIN 문법
SELECT A.*, B.*
FROM raw_data.table1 A
____ JOIN raw_data.table2 B on A.key1 = B.key1 and A.key2 = B.key2
WHERE A.ts > '2019-01-01';
JOIN 시 고려해야 할 점
- 먼저 중복 레코드가 없고 Primary Key의 uniqueness가 보장됨을 체크 !!!
- 조인하는 테이블들 간의 관계를 명확하게 정의
- one to one
- 완전한 one to one: user_session_channel & session_timestamp
- 한 쪽이 부분집합이 되는 one to one: user_session_channel & session_transaction
- one to many? (order vs order_items)
- 이 경우 중복이 더 큰 문제 됨 → 증폭!!
- many to one?
- 방향만 바꾸면 one to many로 보는 것과 동일
- many to many?
- one to one이나 one to many로 바꾸는 것이 가능하다면 변환하여 조인하는 것이 덜 위험
- one to one
- 어느 테이블을 베이스로 잡을지 (from에 사용할지) 결정 필요
JOIN 종류
BOOLEAN 타입 처리
- True or False
- 다음 2개는 동일한 표현이다
- flag = True
- flag is True
- 다음 2개는 동일한 표현인가? → 아님! NULL 값이 포함되어 있을 수 있음
- flag is True
- flag is not False
NULL 비교
- NULL 비교는 항상 IS 혹은 IS NOT으로 수행
- NULL 비교를 = 혹은 != 혹은 <>으로 수행하면 잘못 된 결과가 나옴
복잡한 JOIN 시 먼저 JOIN 전략부터 수립
1. raw_data.user_session_channel
2. raw_data.session_timestamp
3. raw_data.session_transaction
COALESCE 함수
- NULL 값을 다른 값으로 바꿔주는 함수
- 즉, NULL 대신 다른 백업값을 리턴해주는 함수
- COALESCE(exp1, exp2, exp3, ...)
- exp1부터 인자를 하나씩 살펴서 NULL이 아닌 값이 나오면 그 값을 리턴
- 끝까지 갔는데도 모두 NULL이면 최종적으로 NULL을 리턴
→ 어떤 필드의 값이 NULL이 나왔을 경우 다른 값을 쓰고 싶을 때 쓰는 함수
공백 혹은 예약 키워드를 필드 이름으로 사용하려면?
- ""로 둘러싸서 사용
CREATE TABLE keeyong.test(
group int primary key,
'mailing address' varchar(32)
);
반응형