📌 JOIN이란?
JOIN은 두 개 이상의 테이블을 연결해서 하나의 결과로 조회하는 SQL 연산이다.
예를 들어, 회원 정보 + 주문 정보를 한 번에 보고 싶다면 JOIN이 필요하다.
📌 JOIN 문법 기본
SELECT 컬럼명
FROM 테이블1
JOIN 테이블2 ON 조건
✅ JOIN 종류 총정리
종류 | 설명 | 기준 테이블 | 예외 상황 처리 |
INNER JOIN | 양쪽 테이블에 모두 존재하는 데이터만 조회 | 둘 다 | 제외됨 |
LEFT OUTER JOIN | 왼쪽 테이블은 무조건 유지, 오른쪽이 없으면 NULL | 왼쪽 | NULL |
RIGHT OUTER JOIN | 오른쪽 테이블은 무조건 유지 | 오른쪽 | NULL |
FULL OUTER JOIN | 양쪽 모두 유지 (MySQL 지원 X) | 둘 다 | NULL |
SELF JOIN | 같은 테이블끼리 조인 | 자기 자신 | 계층적 관계 표현 |
CROSS JOIN | 모든 행 조합 (곱집합) | 없음 | 조건 없으면 무조건 조합 |
✅ 간단 예제 테이블
👤 members 테이블
id | name |
1 | Teo |
2 | Amy |
📦 orders 테이블
id | member_id | item |
1 | 1 | Book |
2 | 2 | Laptop |
3 | 3 | Pen |
✅ JOIN 예시
🔹 1. INNER JOIN
SELECT m.name, o.item
FROM members m
JOIN orders o ON m.id = o.member_id;
✅ 공통된 id-member_id가 있는 데이터만 조회됨
⛔ member_id = 3은 members에 없으므로 제외
🔹 2. LEFT OUTER JOIN
SELECT m.name, o.item
FROM members m
LEFT JOIN orders o ON m.id = o.member_id;
✅ members 전체 출력
⛔ order 없는 경우는 item이 NULL
🔹 3. RIGHT OUTER JOIN
SELECT m.name, o.item
FROM members m
RIGHT JOIN orders o ON m.id = o.member_id;
✅ orders 전체 출력
⛔ 없는 회원의 주문은 name = NULL
✅ SELF JOIN – 자기 자신과 조인
🔎 개념
SELF JOIN은 하나의 테이블을 두 번 사용해서, 테이블 내의 계층 관계 또는 연결 관계를 표현할 때 사용한다.
예를 들어, 직원 테이블에서 “누가 누구의 상사인지” 표현하려면,
같은 테이블에서 상사 정보를 가져와야 한다 → SELF JOIN!
👔 employees 테이블 예시
emp_id | name | manager_id |
1 | Alice | NULL |
2 | Bob | 1 |
3 | Charlie | 1 |
4 | Diana | 2 |
- manager_id는 상사의 emp_id를 참조함
- 자기 테이블을 참조하는 구조!
🔹 SELF JOIN SQL
SELECT e.name AS employee, m.name AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.emp_id;
🔍 결과
employee | manager |
Alice | NULL |
Bob | Alice |
Charlie | Alice |
Diana | Bob |
✅ 분석
- employees 테이블을 e, m으로 나눠서 사용
- e는 직원, m은 그 직원의 상사 역할
- 조건: e.manager_id = m.emp_id
🔁 SELF JOIN 언제 쓰나?
사용 예 설명
조직도 | 직원 - 상사 관계 |
트리 구조 | 카테고리, 댓글 등 계층 표현 |
참조 관계 | 같은 테이블 내에서 ID → 부모 ID 구조 |
✅ 마무리 요약
- JOIN은 여러 테이블을 한 번에 조회하는 필수 SQL 기능
- SELF JOIN은 같은 테이블 내의 관계를 표현할 때 강력함
- 복잡한 조직도, 트리 구조, 댓글 시스템 등에서 매우 자주 쓰임
'MySQL' 카테고리의 다른 글
IF, CASE, WHILE, 동적 SQL (0) | 2025.04.06 |
---|---|
CREATE, INSERT, UPDATE, DELETE, ALTER (0) | 2025.04.03 |