SQL에서 테이블을 결합할 때 가장 헷갈리기 쉬운 개념 중 하나가 바로 외부 조인(Outer Join)입니다. 이 글에서는 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN의 차이점을 명확하게 정리하고, 각 조인의 동작 방식과 예제 쿼리를 함께 살펴보겠습니다.
1. LEFT OUTER JOIN (왼쪽 외부 조인)
LEFT OUTER JOIN은 왼쪽 테이블(table_1)의 모든 행을 조회하며, 오른쪽 테이블(table_2)에서는 일치하는 데이터만 가져옵니다.
쉽게 말해 다음과 같은 결과를 반환합니다.
- Inner Join 결과 + 왼쪽 테이블의 매칭되지 않은 모든 행
이때 왼쪽 테이블의 행이 오른쪽 테이블에서 짝을 찾지 못하면, 해당 컬럼 값은 NULL로 채워집니다. 반대로 오른쪽 테이블에서 매칭되지 않은 데이터는 결과에 포함되지 않고 사라집니다.
예제 쿼리
SELECT [column_1, column_2, ….] FROM table_1 LEFT OUTER JOIN table_2 ON table_1.matching_column = table_2.matching_column
2. RIGHT OUTER JOIN (오른쪽 외부 조인)
RIGHT OUTER JOIN은 LEFT OUTER JOIN과 정반대로 동작합니다. 오른쪽 테이블(table_2)의 모든 행을 조회하고, 왼쪽 테이블(table_1)에서는 일치하는 데이터만 가져옵니다.
결과 구성은 다음과 같습니다.
- Inner Join 결과 + 오른쪽 테이블의 매칭되지 않은 모든 행
오른쪽 테이블의 행이 왼쪽 테이블에서 짝을 찾지 못하면 해당 컬럼은 NULL로 표시되며, 왼쪽 테이블에서 매칭되지 않은 데이터는 결과에서 제외됩니다.
예제 쿼리
SELECT [column_1, column_2, ….] FROM table_1 RIGHT OUTER JOIN table_2 ON table_1.matching_column = table_2.matching_column
3. FULL OUTER JOIN (전체 외부 조인)
FULL OUTER JOIN은 두 테이블의 모든 행을 전부 조회합니다. 어느 한쪽에도 속하지 않는 데이터도 빠짐없이 포함됩니다.
결과 구성은 다음과 같습니다.
- Inner Join 결과 + 왼쪽 테이블의 매칭되지 않은 모든 행 + 오른쪽 테이블의 매칭되지 않은 모든 행
매칭되지 않은 행의 경우 상대 테이블의 컬럼 값이 NULL로 채워지며, 조회 과정에서 어떠한 데이터도 손실되지 않습니다.
예제 쿼리
SELECT [column_1, column_2, ….] FROM table_1 FULL OUTER JOIN table_2 ON table_1.matching_column = table_2.matching_column
정리: 세 가지 조인 비교표
| 조인 종류 | 조회 기준 | 데이터 손실 여부 |
|---|---|---|
| LEFT OUTER JOIN | 왼쪽 테이블의 모든 행 | 오른쪽 미매칭 데이터 손실 |
| RIGHT OUTER JOIN | 오른쪽 테이블의 모든 행 | 왼쪽 미매칭 데이터 손실 |
| FULL OUTER JOIN | 양쪽 테이블의 모든 행 | 데이터 손실 없음 |
핵심을 요약하면, LEFT와 RIGHT는 기준이 되는 테이블의 방향만 다를 뿐 동작 원리는 동일하며, FULL OUTER JOIN은 양쪽의 모든 데이터를 보존해야 할 때 사용합니다. 실무에서는 MySQL처럼 FULL OUTER JOIN을 직접 지원하지 않는 DBMS도 있으므로, 이 경우 LEFT JOIN과 RIGHT JOIN의 결과를 UNION으로 합쳐서 구현할 수 있다는 점도 참고하시기 바랍니다.