SQL에서 데이터베이스 테이블 간의 관계를 정의하고 결합하는 데 가장 일반적인 두 가지 유형의 조인이 있습니다.
바로 INNER JOIN
과 OUTER JOIN
입니다.
MySQL 환경에서 아래의 두 테이블을 가지고 JOIN 예제를 살펴보겠습니다.
INNER JOIN
은 조인 조건에 일치하는 행만 반환하기 때문에, 두 테이블 모두에서 조건을 만족하는 데이터가 있어야 합니다.
따라서 INNER JOIN
은 두 테이블 간의 교집합을 구할 때 사용됩니다.
SELECT * FROM a_table INNER JOIN b_table ON a_table.color = b_table.color;
위 예제에서 ON a_table.color = b_table.color
조건이 일치하는 row만 합쳐진 것을 확인할 수 있습니다.
OUTER JOIN
에는 세 가지 종류가 있습니다.
LEFT JOIN
RIGHT JOIN
FULL JOIN
이 조인들은 INNER JOIN
과 달리 조인 조건에 일치하지 않는 데이터도 반환합니다.
LEFT JOIN
은 왼쪽 테이블의 모든 행과 오른쪽 테이블에서 일치하는 행을 반환합니다.
일치하는 행이 없는 경우, 오른쪽 테이블의 열은 NULL로 채워집니다.
SELECT * FROM a_table LEFT JOIN b_table ON a_table.color = b_table.color;
위 예제에서 ON a_table.color = b_table.color
조건이 일치하는 b_table의 row만 표시되고 나머지는 NULL이 채워진 것을 확인할 수 있습니다.
RIGHT JOIN
은 LEFT JOIN
과 반대로, 오른쪽 테이블의 모든 행과 왼쪽 테이블에서 일치하는 행을 반환합니다.
일치하는 행이 없는 경우, 왼쪽 테이블의 열은 NULL로 채워집니다.
SELECT * FROM a_table RIGHT JOIN b_table ON a_table.color = b_table.color;
위 예제에서 ON a_table.color = b_table.color
조건이 일치하는 a_table의 row만 표시되고 나머지는 NULL이 채워진 것을 확인할 수 있습니다.
FULL JOIN
은 두 테이블의 모든 행을 반환하며, 일치하지 않는 데이터는 NULL로 표시됩니다.
이는 두 테이블 간의 합집합을 구하는 방식입니다.
MySQL에서는 FULL JOIN
을 지원하지 않으므로 개념적인 부분만 그림으로 살펴보겠습니다.
a_table과 b_table의 모든 row가 표시되지만, 조건이 일치하지 않는 부분은 모두 NULL이 채워집니다.