← 아티클 목록

SQL 조인 종류 한 번에 이해하기 (INNER·LEFT·RIGHT·CROSS)

2028-07-17#database#SQL#조인

"회원 목록에 각자 주문 건수를 붙이고 싶은데 어떤 조인을 써야 하죠?" 조인을 처음 배우면 종류가 너무 많아 보여 막막합니다. 하지만 조인은 결국 두 테이블을 어떤 기준으로 이어 붙일지, 그리고 짝이 없는 행을 살릴지 버릴지의 차이일 뿐입니다. INNER·LEFT·RIGHT·CROSS 네 가지만 송금처럼 명확한 예시로 보면 한 번에 정리됩니다.

조인 종류 한눈에

users(회원)와 orders(주문) 두 테이블을 이어 붙인다고 합시다. 회원 중에는 주문이 없는 사람도 있고, 주문에는 회원을 가리키는 user_id가 있습니다.

조인핵심짝 없는 행 처리
INNER JOIN양쪽에 짝이 있는 행만짝 없으면 둘 다 버림
LEFT JOIN왼쪽 테이블은 전부 유지오른쪽 짝 없으면 NULL 채움
RIGHT JOIN오른쪽 테이블은 전부 유지왼쪽 짝 없으면 NULL 채움
CROSS JOIN모든 조합을 곱함조건 없이 행 수 = 왼쪽 × 오른쪽

예시로 구분하기

회원은 3명(1·2·3번), 주문은 1번과 2번 회원만 했다고 가정합니다.

SQL
-- 주문이 있는 회원만 보고 싶을 때
SELECT u.name, o.id
FROM users u
INNER JOIN orders o ON u.id = o.user_id;

INNER JOIN은 양쪽에 짝이 맞는 행만 남깁니다. 그래서 주문이 없는 3번 회원은 결과에서 빠집니다.

SQL
-- 주문이 없는 회원까지 전부 보고 싶을 때
SELECT u.name, o.id
FROM users u
LEFT JOIN orders o ON u.id = o.user_id;

LEFT JOIN은 왼쪽(users)을 한 명도 빼지 않습니다. 3번 회원은 주문이 없으니 o.id 자리에 NULL이 들어갑니다. "회원별 주문 건수(0건 포함)"를 구할 때 거의 항상 LEFT JOIN을 씁니다.

RIGHT JOIN은 방향만 반대입니다. 오른쪽 테이블을 전부 살리므로, 사실 두 테이블 순서를 바꾸면 LEFT JOIN으로 똑같이 표현됩니다. 그래서 실무에서는 가독성을 위해 LEFT JOIN으로 통일하는 경우가 많습니다.

CROSS JOIN은 조건 없이 모든 조합을 만듭니다. 회원 3명 × 사이즈 4종 = 12행처럼, "가능한 모든 짝"을 만들 때만 의도적으로 씁니다. ON 조건을 깜빡한 실수로 발생하면 행이 폭발하니 주의해야 합니다.

요점 정리

  • 조인은 두 테이블을 잇는 방식 — 짝 없는 행을 버리느냐 살리느냐가 핵심.
  • INNER는 양쪽 짝만, LEFT는 왼쪽 전부, RIGHT는 오른쪽 전부 유지.
  • CROSS는 모든 조합을 곱하니 의도할 때만 사용한다.

usersorders 같은 실제 테이블로 네 가지 조인을 직접 실행하고 결과 행이 어떻게 달라지는지 확인하는 실습은 데이터베이스 트랙에서 회원가입 없이 무료로 할 수 있습니다.