BOARD / JOIN / 2026-04-13

SQL JOIN 정리

JOIN은 SQLD 실습에서 체감 난도가 가장 크게 올라가는 구간입니다. 한 테이블만 볼 때는 쉬웠던 쿼리가 두 테이블 이상으로 확장되는 순간 조건 위치와 기준 컬럼에 따라 결과가 완전히 달라지기 때문입니다.

게시판 목록BLACK SQL 실습SQLD 문제은행

JOIN은 결국 어떤 행과 어떤 행을 연결할지를 정하는 작업입니다. 연결 기준을 ON에 분명히 적고, 조인 종류에 따라 빠지는 행과 남는 행이 어떻게 달라지는지 직접 결과로 확인해야 합니다.

핵심 체크포인트

  • INNER JOIN은 매칭되는 행만 남기고, OUTER JOIN은 한쪽 기준 행을 유지합니다.
  • SELF JOIN은 같은 테이블을 두 번 읽을 때 쓰며 별칭이 사실상 필수입니다.
  • USING, ON, NATURAL JOIN은 문법 차이보다 연결 기준이 얼마나 명확한지가 중요합니다.

주제별 설명

INNER JOIN

양쪽 테이블에서 조건이 맞는 행만 남기는 가장 기본적인 조인입니다.

  • 시험과 실무에서 가장 자주 보이는 기본 조인 패턴입니다.
  • 결과가 기대보다 적다면 조인 키나 WHERE 조건을 먼저 점검하면 좋습니다.
SELECT m.member_name,
       p.order_id
FROM members m
JOIN payments p
  ON m.member_id = p.member_id;

OUTER JOIN

조건이 맞지 않아도 한쪽 기준 행을 유지하는 조인입니다.

  • LEFT는 왼쪽 유지, RIGHT는 오른쪽 유지, FULL은 양쪽 모두 유지입니다.
  • 조인 후 NULL이 생기는 이유를 읽을 수 있어야 외부 조인을 이해한 것입니다.

CROSS JOIN

조건 없이 가능한 모든 조합을 만드는 카테시안 곱입니다.

  • 행 수가 급격히 늘어나므로 의도적으로 쓸 때만 사용해야 합니다.
  • 조인 조건 누락 실수로 CROSS JOIN 같은 결과가 나오는 경우도 많습니다.

SELF JOIN

같은 테이블을 두 번 사용해 상하 관계나 부모-자식 관계를 표현하는 조인입니다.

  • 사원-관리자, 조직-상위조직처럼 같은 구조를 재귀적으로 볼 때 자주 씁니다.
  • 테이블 별칭을 명확하게 나누지 않으면 컬럼 출처를 구분하기 어렵습니다.
SELECT child.unit_name AS child_name,
       parent.unit_name AS parent_name
FROM org_units child
JOIN org_units parent
  ON child.parent_unit_id = parent.unit_id;

USING / ON

조인 조건을 적는 두 가지 대표 문법입니다.

  • ON은 컬럼명이 달라도 자유롭게 연결할 수 있어 가장 일반적입니다.
  • USING은 동일한 컬럼명을 공유할 때 간결하지만 제약이 더 있습니다.

NATURAL JOIN

같은 이름의 컬럼을 자동으로 연결하는 문법입니다.

  • 자동 연결이라 짧아 보이지만 어떤 컬럼이 묶이는지 명시성이 떨어집니다.
  • 학습 목적이 아니라면 ON 문법이 더 안전하고 읽기 쉽습니다.

실습 흐름 추천

  1. INNER JOIN으로 기준 테이블과 연결 컬럼을 먼저 확인합니다.
  2. LEFT JOIN으로 바꿔 NULL이 생기는 행이 무엇인지 비교합니다.
  3. SELF JOIN에서는 별칭을 먼저 정한 뒤 컬럼 출처를 하나씩 읽습니다.
바로 이어서 해보려면

이론만 읽지 말고 바로 blacksql.sqld.kr에서 실행해보고, 문제 풀이 감각은 www.sqld.kr에서 이어가면 학습 속도가 훨씬 빨라집니다.

자주 묻는 질문

LEFT JOIN 이후 WHERE에 오른쪽 테이블 조건을 쓰면 왜 결과가 줄어드나요?

WHERE에서 오른쪽 컬럼 조건을 걸면 NULL 행이 다시 제거되기 때문입니다. 외부 조인 의도를 살리려면 ON 위치를 먼저 검토해야 합니다.

JOIN은 어떤 순서로 익히는 게 좋나요?

INNER JOIN -> LEFT JOIN -> SELF JOIN -> USING/ON 차이 순서로 연습하면 흐름이 자연스럽습니다.