전체 목록
데이터베이스Medium#212

INNER JOIN과 OUTER JOIN의 차이를 설명해주세요.

#데이터베이스#JOIN#SQL#조회

답변 포인트

매칭되지 않는 행의 포함 여부를 기준으로 정의, 장점, 한계, 예시를 함께 설명해보세요.

정답 및 해설

빠른 요약

INNER JOIN은 양쪽에 매칭되는 행만 반환하고, OUTER JOIN은 매칭되지 않는 행도 NULL과 함께 포함할 수 있습니다. 선택적 관계 조회에 OUTER JOIN이 유용합니다.

INNER JOIN은 양쪽 테이블에서 조건에 맞는 행이 모두 존재할 때만 결과를 반환하고, OUTER JOIN은 한쪽에 매칭되는 행이 없어도 기준 테이블의 행을 보존합니다.

INNER JOIN

SQL
SELECT u.id, u.name, o.id AS order_id
FROM users u
JOIN orders o ON o.user_id = u.id;

주문이 있는 사용자만 결과에 나옵니다. 사용자만 있고 주문이 없으면 제외됩니다.

LEFT OUTER JOIN

SQL
SELECT u.id, u.name, o.id AS order_id
FROM users u
LEFT JOIN orders o ON o.user_id = u.id;

모든 사용자를 보여주고, 주문이 없으면 order_idNULL이 됩니다. “아직 주문하지 않은 사용자 찾기”처럼 누락된 관계를 찾을 때 유용합니다.

SQL
SELECT u.*
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
WHERE o.id IS NULL;

주의할 함정

LEFT JOIN을 해놓고 오른쪽 테이블 조건을 WHERE에 쓰면 INNER JOIN처럼 동작할 수 있습니다.

SQL
-- 의도와 다를 수 있음: o.status 조건 때문에 NULL 행 제거
SELECT u.*
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
WHERE o.status = 'PAID';

-- 매칭 조건에 포함해야 기준 행 보존
SELECT u.*
FROM users u
LEFT JOIN orders o
  ON o.user_id = u.id AND o.status = 'PAID';

FULL OUTER JOIN / RIGHT JOIN

FULL OUTER JOIN은 양쪽 모두의 미매칭 행을 보존합니다. 데이터 동기화 차이를 찾을 때 유용합니다. RIGHT JOIN은 기준 방향만 반대이며, 가독성 때문에 LEFT JOIN으로 바꿔 쓰는 경우가 많습니다.

면접 답변 포인트

INNER JOIN은 교집합, OUTER JOIN은 기준 테이블의 행을 보존하는 조인이라고 설명하면 됩니다. 특히 LEFT JOIN 후 오른쪽 조건을 WHERE에 두면 결과가 달라지는 함정을 예시로 들면 실무 이해가 잘 드러납니다.

관련 질문

같은 카테고리/태그 기준