카테고리 없음
Week 6 - 4
out_of_anjoong
2024. 4. 25. 17:06
JOIN
두 개 혹은 그 이상의 테이블들의 공통 필드를 가지고 머지하는데 사용됨.
스타 스키마로 구성된 테이블들로 분산되어 있던 정보를 통합.
왼쪽 테이블을 LEFT, 오른쪽 테이블을 RIGHT라고 함.
- 먼저 중복 레코드가 없고 Primary Key의 uniqueness가 보장됨을 체크
- 조인하는 테이블들 간의 관계를 명확하게 정의
- one to one
조인키(조인 필드)가 양 테이블에 한번씩 나오는 관계 - one to many
한 테이블엔 하나씩 있지만 다른 테이블엔 여러번 - many to one
방향만 바꾸면 one to many와 사실상 동일 - many to many
많지 않은 경우지만 one to one이나 one to many로 변환하여 조인(가능하면)
- one to one
- 어느 테이블을 베이스로 잡을 지 결정
- INNER JOIN
- 양쪽 테이블에서 매치가 되는 레코드들만 리턴함
- 양쪽 테이블의 필드가 모두 채워진 상태로 리턴됨.
- LEFT JOIN
- 왼쪽 테이블의 모든 레코드들을 리턴함
- 오른쪽 테이블의 필드는 왼쪽 레코드와 매칭되는 경우에만 채워진 상태로 리턴됨
- FULL JOIN
- 왼쪽 테이블과 오른쪽 테이블의 모든 레코드를 리턴함
- 매칭되는 경우에만 양쪽 테이블들의 모든 필드들이 채워진 상태로 리턴됨.
- CRISS JOIN(CARTESIAN JOIN)
- 양쪽 테이블의 모든 레코드들의 조합
- SELF JOIN
- 동일한 테이블을 alias를 달리해서 자기 자신과 조인
BOOLEAN
- True or False
- flag = True, flag is True
- IS TRUE vs IS NOT FALSE : TRUE이냐와 FALSE가 아니냐는 의미상은 같지만 결과는 다름(NULL 같이 FALSE 가 아닌 것 까지 고려되기 때문)
유용한 함수
- NULLIF(A, B)
A = B이면 NULL을 리턴 - COALESCE
NULL 값을 다른 값으로 바꿔주는 함수(NULL 대신에 다른 백업값을 리턴해주는 함수)- COALESCE(exp1, exp2, exp3, ...)
- exp1부터 인자를 하나씩 살펴서 NULL이 아닌 값이 나오면 그걸 리턴
- 끝까지 갔는데도 모두 NULL이면 최종적으로 NULL을 리턴
- COALESCE(exp1, exp2, exp3, ...)
- ROUND(A ,2)
A를 소숫점 2자리까지 반올림 - minus(except)
앞 셀렉트 결과문에서 뒤 셀렉트 결과문을 다 뺀 결과.(앞 셀렉트에는 있지만 뒤 셀렉트에는 없는 것만 결과로 나옴)
만약 똑같다면 아무 것도 리턴이 안됨
select distinct sessionid from raw_data.session_timestamp
minus
select distinct sessionid from raw_data.user_session_channel
;