TIL
JOIN이란?
두 개 혹은 그 이상의 테이블들을 공통 필드를 가지고 merge하는데 사용된다.
조인의 방식에 따라 두 가지가 달라진다.
- 어떤 레코드들이 선택되는지?
- 어떤 필드들이 채워지는지?
JOIN에는 6가지 종류가 있다.
- INNER JOIN
- FULL JOIN
- CROSS JOIN
- LEFT JOIN
- RIGHT JOIN
- SELF JOIN
보통 INNER JOIN이나 LEFT 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의 방법은 위와 같으며 FROM 다음에 left table이라고 한다면 JOIN 다음은 right table이 오고 ON으로 JOIN의 조건을 적용한다.
____에는 INNER, FULL, LEFT, RIGHT, CROSS가 들어간다.
JOIN시 고려해야할 점
- 중복 레코드가 없어야 한다. (중요함!!!)
primary key의 uniqueness가 보장되는지 확인해야함
- 조인하는 테이블들간의 관계를 명확하게 정의해야한다.
- One to one
- One to many
- Many to many
- 어느 테이블을 베이스로 사용할지 결정해야 한다.
(FROM에 사용할지)
INNER JOIN
- 양쪽 테이블에서 매치가 되는 레코드들만 리턴한다.
- 양쪽 테이블의 필드가 모두 채워진 상태로 리턴된다.
JOIN 앞에 INNER를 붙여주지 않고 JOIN만 사용해도 INNER JOIN으로 사용된다.
LEFT JOIN
- 왼쪽 테이블의 모든 레코드들을 리턴한다.
- 오른쪽 테이블의 필드는 왼쪽 레코드와 매칭되는 경우에만 채워진 상태로 리턴된다.
RIGHT JOIN
또한 방향만 반대로 같은 개념
FULL JOIN
- 왼쪽 테이블과 오른쪽 테이블의 모든 레코드들을 리턴한다.
- 매칭되는 경우에만 양쪽 테이블들의 모든 필드들이 채워진 상태로 리턴된다.
CROSS JOIN
- 왼쪽 테이블과 오른쪽 테이블의 모든 레코드들의 조합을 리턴한다.
SELF JOIN
- 동일한 테이블을 alias를 달리해서 자기 자신과 조합한다.
SELECT * FROM raw_data.Vital v1
JOIN raw_data.Vital v2 ON v1.vitalID = v2.vitalID;