Pink Spider/All About Join

Created Wed, 18 Jun 2025 11:27:58 +0900 Modified Mon, 08 Dec 2025 08:41:47 +0900
910 Words 4 min

MySQL을 비롯한 대부분의 관계형 데이터베이스에서 사용되는 JOIN은 여러 테이블의 데이터를 조합해 하나의 결과로 만드는 데 사용됩니다. 아래는 대표적인 JOIN 종류와 각각의 설명, 예제를 포함한 정리입니다.


🔗 1. INNER JOIN

✅ 정의

두 테이블에서 공통된 값이 존재하는 행만 반환합니다.

🧪 예시

SELECT a.id, a.name, b.order_date
FROM customers a
INNER JOIN orders b ON a.id = b.customer_id;

📌 특징

  • 가장 일반적인 JOIN 방식
  • 양쪽 모두 일치하는 값이 있어야 결과에 포함됨

🔗 2. LEFT JOIN (또는 LEFT OUTER JOIN)

✅ 정의

왼쪽 테이블의 모든 행을 반환하며, 오른쪽 테이블에 일치하는 값이 없으면 NULL로 채워집니다.

🧪 예시

SELECT a.id, a.name, b.order_date
FROM customers a
LEFT JOIN orders b ON a.id = b.customer_id;

📌 특징

  • 고객 중 주문 이력이 없는 사람도 포함됨
  • “왼쪽 기준” 전체 목록이 필요할 때 유용

🔗 3. RIGHT JOIN (또는 RIGHT OUTER JOIN)

✅ 정의

오른쪽 테이블의 모든 행을 반환하며, 왼쪽 테이블에 일치하는 값이 없으면 NULL로 채워집니다.

🧪 예시

SELECT a.id, a.name, b.order_date
FROM customers a
RIGHT JOIN orders b ON a.id = b.customer_id;

📌 특징

  • 주문은 존재하지만 고객 테이블에 정보가 없을 경우에도 포함됨 (예: 삭제된 고객)

🔗 4. FULL OUTER JOIN (MySQL은 직접 지원하지 않음)

✅ 정의

양쪽 테이블의 모든 행을 반환하며, 일치하지 않는 경우 NULL로 표시합니다.

🧪 대안 예시 (MySQL에서 시뮬레이션 방식)

SELECT *
FROM customers a
LEFT JOIN orders b ON a.id = b.customer_id
UNION
SELECT *
FROM customers a
RIGHT JOIN orders b ON a.id = b.customer_id;

📌 특징

  • LEFT + RIGHT를 합친 개념
  • MySQL에서는 직접 지원하지 않으므로 UNION을 통해 흉내냄

🔗 5. CROSS JOIN

✅ 정의

모든 조합(Cartesian Product) 을 반환합니다. 예: A(3개 행) × B(2개 행) = 6개 행

🧪 예시

SELECT a.name, b.product
FROM customers a
CROSS JOIN products b;

📌 특징

  • 조합 생성에 유용 (예: 옵션, 요일, 좌석)
  • 실수로 사용 시 폭발적인 데이터 양 초래 가능

🔗 6. SELF JOIN

✅ 정의

자기 자신 테이블과의 JOIN입니다. 계층 구조나 상호 관계 표현에 사용됩니다.

🧪 예시

SELECT a.name AS employee, b.name AS manager
FROM employees a
LEFT JOIN employees b ON a.manager_id = b.id;

📌 특징

  • 조직도나 트리 구조에서 자주 사용

✅ 요약표

JOIN 종류 설명 포함 행 수
INNER JOIN 양쪽 일치하는 행만 교집합
LEFT JOIN 왼쪽 + 오른쪽 일치하는 행 왼쪽 기준 전체
RIGHT JOIN 오른쪽 + 왼쪽 일치하는 행 오른쪽 기준 전체
FULL OUTER JOIN 양쪽 전체 + 일치하지 않으면 NULL 합집합 (MySQL에서는 UNION 필요)
CROSS JOIN 두 테이블의 모든 조합 곱집합 (N × M)
SELF JOIN 같은 테이블끼리 JOIN 자기 자신과 비교 필요 시

필요하시면 각 JOIN의 시각화 도표, 성능 튜닝 팁, 또는 쿼리 최적화 예제도 도와드릴 수 있습니다.