
이미지 출처: https://theartofpostgresql.com/blog/2019-09-sql-joins/
공통 필드(특정 KEY)를 가지고 MERGE 할 때 사용된다.분산되어 있는 정보를 통합하는데 사용한다.SELECT A.*
, B.*
FROM TABLE1 A
_ JOIN TABLE2 B -- JOIN 앞의 _에 LEFT, INNER, RIGHT, CROSS, FULL이 들어가게 된다
ON A.KEY1 = B.KEY1
AND A.KEY2 = B.KEY2;
먼저 중복 레코드가 없고 Primary Key의 uniqueness가 보장되어야 한다. (JOIN을 하기에 앞서 항상 데이터의 정확성을 검증해야 한다.)
조인하는 테이블들간의 관계를 명확하게 정의해야 한다.
완전한 ONE TO ONE과 한쪽이 부분 집합이 되는 ONE TO ONE이 존재한다.EMPLOYEE 테이블과 DEPARTMENT 테이블이 있다고 했을 때 DEPARTMENT 관점에서 하나의 지점에 여러 직원이 속할 수 있으므로 둘은 ONE TO MANY 관계이다.어떤 테이블을 베이스로 잡을지(FROM에 사용할지) 결정해야 함.
💻 이 포스트에서는 이 두 테이블을 이용해 JOIN에 대해 정리하였다.
raw_data.Vital은 환자의 Vital 측정 정보를 담고 있는 테이블이다.raw_data.Alert은 환자의 Alert 정보를 담고 있는 테이블로 Vital과 관련하여 변화가 발생하였다면 Alert 테이블에 정보가 쌓이게 된다.
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;

NULL이 NONE으로 나오게 된다.LEFT JOIN과 방향만 바뀐 개념으로 만약 왼쪽 테이블의 데이터 중 오른쪽 레코드와 매칭되는 경우가 있다면 오른쪽 레코드와 매칭되는 경우만 채워진 상태로 리턴된다.SELECT *
FROM RAW_DATA.VITAL V
RIGHT 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

4 * 3 = 12 개의 데이터가 조합돼서 나온다.CROSS JOIN은 JOIN한 테이블 데이터 사이에서 나올 수 있는 모든 경우의 수를 조합해 주기 때문에 ON 절을 통해 KEY를 매칭해 줄 필요가 없다.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