SQLD
2과목
8
업데이트 2026.08.08

SQL JOIN 완전 정리: INNER·OUTER·SELF JOIN 결과 읽는 법

SQLD 조인 문제에서 행이 늘거나 사라지는 이유를 INNER JOIN, OUTER JOIN, SELF JOIN 예제로 단계별 설명합니다.

이 글의 핵심

INNER JOIN은 조건이 일치하는 행만, OUTER JOIN은 기준 테이블의 미일치 행도 보존합니다.

조인 결과 행 수는 키의 유일성과 조건에 맞는 상대 행 개수에 따라 달라집니다.

OUTER JOIN 뒤 WHERE 조건을 잘못 두면 보존했던 NULL 행이 다시 제거될 수 있습니다.

조인은 두 테이블을 가로로 연결한다

조인은 한 테이블의 열만으로 답을 만들 수 없을 때 관련된 테이블의 행을 연결하는 연산입니다. 핵심은 테이블 이름이 아니라 어떤 행끼리 연결되는지 결정하는 ON 조건입니다.

고객 한 명에게 주문이 세 건 있으면 고객 행은 결과에서 세 번 나타납니다. 조인이 중복을 만든 것이 아니라 조건에 맞는 주문 행이 세 개이기 때문에 연결 결과가 세 행이 된 것입니다.

기본 INNER JOIN
SELECT c.customer_name, o.order_id
FROM customers c
JOIN orders o
  ON o.customer_id = c.customer_id;

INNER JOIN과 OUTER JOIN의 결정적 차이

INNER JOIN은 ON 조건이 참인 조합만 남깁니다. 주문이 없는 고객처럼 상대 테이블에서 일치 행을 찾지 못하면 결과에서 사라집니다.

LEFT OUTER JOIN은 왼쪽 테이블의 모든 행을 보존합니다. 상대 행이 없으면 오른쪽 열을 NULL로 채웁니다. “주문이 없는 고객도 포함”처럼 기준 집합을 유지하라는 문장이 OUTER JOIN의 신호입니다.

조인보존되는 행대표 요구사항
INNER JOIN양쪽에서 조건이 일치한 행주문한 고객만 조회
LEFT OUTER JOIN왼쪽 전체 + 오른쪽 일치 행모든 고객과 주문 조회
FULL OUTER JOIN양쪽의 일치·미일치 행 전체양쪽 누락 데이터 비교

ON과 WHERE 위치가 결과를 바꾸는 경우

INNER JOIN에서는 필터 조건을 ON이나 WHERE에 두어 같은 결과가 나오는 경우가 많습니다. 하지만 OUTER JOIN에서는 위치가 중요합니다. 오른쪽 테이블 조건을 WHERE에 두면 오른쪽 값이 NULL인 미일치 행이 제거되어 사실상 INNER JOIN처럼 변할 수 있습니다.

주문 금액 조건을 유지하면서 모든 고객 보존
SELECT c.customer_id, o.order_id
FROM customers c
LEFT JOIN orders o
  ON o.customer_id = c.customer_id
 AND o.amount >= 100000;

“기준 테이블 전체를 남겨야 하는가?”를 먼저 표시하고, 상대 테이블 조건이 ON에 있어야 하는지 판단하세요.

SELF JOIN은 같은 테이블의 서로 다른 역할을 연결한다

사원 테이블 안에 관리자 사원번호가 저장된 조직 구조처럼 한 테이블의 행이 같은 테이블의 다른 행을 참조할 수 있습니다. 이때 같은 테이블에 서로 다른 별칭을 주어 SELF JOIN합니다.

사원과 관리자 이름 조회
SELECT e.employee_name, m.employee_name AS manager_name
FROM employees e
LEFT JOIN employees m
  ON m.employee_id = e.manager_id;

조인 문제를 푸는 네 단계

복잡한 조인도 기준 행, 연결 개수, 보존 방향, 후속 필터의 순서로 나누면 계산할 수 있습니다. 실제 시험에서는 작은 표 옆에 각 단계에서 남는 행 번호를 적는 방식이 빠릅니다.

  • 각 테이블의 조인 키와 중복 여부를 표시한다.
  • ON 조건에 맞는 상대 행 개수를 센다.
  • OUTER JOIN이 보존할 미일치 행을 추가한다.
  • WHERE 조건으로 최종 제거되는 행을 확인한다.

자주 묻는 질문

LEFT JOIN과 LEFT OUTER JOIN은 다른가요?

같은 의미입니다. OUTER 키워드는 생략할 수 있어 LEFT JOIN이라고 자주 작성합니다.

NATURAL JOIN은 언제 주의해야 하나요?

양쪽 테이블에서 이름이 같은 모든 열을 자동 조인 조건으로 사용합니다. 예상하지 않은 동명 열까지 조건에 포함될 수 있으므로 문제에서 열 구성을 꼼꼼히 확인해야 합니다.

시험 과목과 합격 기준은 KDATA SQL 개발자 공식 안내를 기준으로 확인했습니다. 가풀은 시험 주관기관의 공식 서비스가 아니며, 일정과 규정은 접수 전 공식 공고를 다시 확인해야 합니다.

2과목

GROUP BY와 HAVING 차이: SQLD 집계 문제 실수 줄이기

읽기
2과목

SQL NULL 완전 정리: COUNT·비교 연산·NVL에서 틀리지 않는 법

읽기
2과목

SQL 윈도우 함수 정리: RANK·ROW_NUMBER·누적합 한 번에 이해하기

읽기