Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

LEFT OUTER JOIN vs RIGHT OUTER JOIN vs FULL OUTER JOIN: 차이점 완벽 정리

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으로 합쳐서 구현할 수 있다는 점도 참고하시기 바랍니다.