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의 시각화 도표, 성능 튜닝 팁, 또는 쿼리 최적화 예제도 도와드릴 수 있습니다.