컴퓨터 과학/데이터 베이스

SQL 다양한 조인(Join) 연산 정리

Data Jun 2025. 8. 18. 10:32

SQL에서 테이블을 합치는 방식은 크게 두 가지로 나눌 수 있습니다.

  • 결합 연산 (가로 방향 결합): 서로 다른 테이블의 컬럼들을 이어 붙여 새로운 결과를 만듦.
  • 집합 연산 (세로 방향 결합): 여러 테이블의 데이터를 한 줄로 쌓아 올림.

이번 글에서는 우리가 잘 아는 INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN 같은 기본 조인 외에, 현업에서 자주 보지는 않지만 알아두면 좋은 특수한 조인들을 정리해보겠습니다.

NATURAL JOIN (자연 조인)

  • 특징: 두 테이블에서 이름이 같은 컬럼을 자동으로 찾아 조인 조건으로 삼습니다.
  • 결과: 별도의 ON 절이 없어도 INNER JOIN처럼 동작합니다.
SELECT *
FROM player NATURAL JOIN team;
  • 장점: SQL이 짧아짐.
  • 단점: 어떤 컬럼으로 조인되는지 한눈에 알기 어려움 → 실무에서는 잘 안 씀.

 

CROSS JOIN (카르테시안 곱)

  • 특징: 한 테이블의 모든 row와 다른 테이블의 모든 row를 조합.
  • 수학적 개념: Cartesian Product.
SELECT *
FROM member CROSS JOIN stock;

예를 들어, 상의 테이블하의 테이블을 CROSS JOIN 하면 가능한 모든 코디 조합을 얻을 수 있습니다.
실무에서는 잘 쓰이지 않지만, 모든 경우의 수를 만들어내야 할 때 유용합니다.

 

 

SELF JOIN (자기 자신과 조인)

  • 특징: 같은 테이블을 두 번 불러와 서로 다른 alias를 붙여 조인.
SELECT m1.email, m2.email
FROM member m1
LEFT JOIN member m2
ON m1.age = m2.age;
  • 활용 예시
    • 동갑 회원 찾기: 같은 나이를 가진 회원들끼리 묶기
    • 조직도 조회: employee 테이블에서 boss_id를 자기 자신의 id와 조인해 상사 정보 붙이기

SELF JOIN을 활용하면 하나의 테이블에서도 여러 관점으로 데이터를 볼 수 있습니다.

 

 

FULL OUTER JOIN (완전 외부 조인)

  • 특징: LEFT OUTER JOIN + RIGHT OUTER JOIN 결과를 합친 것.
  • 차이점: 두 결과에 공통으로 존재하는 row는 한 번만 표시.
-- MySQL에서는 FULL OUTER JOIN이 직접 지원되지 않음
-- 대신 LEFT JOIN과 RIGHT JOIN을 UNION으로 합쳐서 구현 가능
SELECT * FROM player p
LEFT JOIN team t ON p.team_name = t.team_name
UNION
SELECT * FROM player p
RIGHT JOIN team t ON p.team_name = t.team_name;

Oracle 같은 DBMS에서는 아래처럼 간단히 가능:

SELECT *
FROM player FULL OUTER JOIN team
ON player.team_name = team.team_name;

 

 

Non-Equi Join (비등가 조인)

  • 특징: = 대신 <, >, BETWEEN, LIKE 등 다양한 조건 사용.
  • 예시: 회원 가입일 이후 등록된 상품을 매칭
SELECT m.email, i.item_name
FROM member m
LEFT JOIN item i
ON m.sign_up_day < i.registration_date;

이렇게 하면 특정 회원이 가입한 이후에 올라온 상품 목록을 볼 수 있습니다.

즉, 조인 조건이 꼭 "값이 같다(=)"일 필요는 없고, 상황에 따라 유연하게 조건을 적용할 수 있다는 점이 핵심입니다.

 

마무리

오늘은 기본 조인 외에 잘 쓰이지 않지만, 알아두면 좋은 조인들을 정리했습니다.

  • NATURAL JOIN: 자동 매칭, 하지만 불명확해서 실무에서는 잘 안 씀
  • CROSS JOIN: 모든 경우의 수 조합
  • SELF JOIN: 자기 자신과 조인해 다양한 관점 제공
  • FULL OUTER JOIN: LEFT + RIGHT 결과 합침
  • Non-Equi JOIN: = 말고 다양한 조건 활용

👉 앞으로 SQL을 보다가 생소한 조인을 만나도 당황하지 않고, "아! 이런 조인이 있었지!" 하고 이해할 수 있을 거예요.