개발/SQL

JOIN 종류 정리: INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN 비교

예니03 2025. 3. 16. 11:29
반응형

SQL에서 JOIN은 두 개 이상의 테이블을 연결하여 데이터를 조회할 때 사용하는 중요한 개념입니다.
데이터베이스에서 하나의 테이블만으로 필요한 정보를 모두 얻기 어려운 경우가 많기 때문에,
JOIN을 활용하여 여러 테이블의 데이터를 효과적으로 조합할 수 있습니다.
이번 글에서는 INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN의 차이점을 쉽게 이해할 수 있도록 설명해드리겠습니다! 😊


🔹 1. JOIN이란?

JOIN은 두 개 이상의 테이블을 특정 기준(공통된 열, 보통 PK & FK)으로 연결하는 기능입니다.
일반적으로 기본키(Primary Key)와 외래키(Foreign Key) 관계를 활용하여 데이터를 조합합니다.
📌 예제 테이블
우리가 사용할 테이블은 직원 정보(employees)와 부서 정보(departments)입니다.

🔸 employees (직원 테이블)

emp_idnamedept_id
1Alice101
2Bob102
3Charlie103
4DavidNULL

🔸 departments (부서 테이블)

dept_iddept_name
101IT
102HR
104Finance

🔹 2. INNER JOIN – 공통된 데이터만 조회

📌 INNER JOIN두 테이블에서 일치하는 데이터만 조회합니다.
즉, ON 조건에 맞는 데이터만 가져오고, 일치하지 않는 행은 제외됩니다.

INNER JOIN 문법

SELECT e.emp_id, e.name, d.dept_name
FROM employees e
INNER JOIN departments d
ON e.dept_id = d.dept_id;

🔸 결과 (공통된 데이터만 조회됨)

emp_idnamedept_name
1AliceIT
2BobHR

dept_id = 103 (Charlie), NULL (David), dept_id = 104 (Finance)는 제외됨
공통된 값이 없는 데이터는 출력되지 않음


🔹 3. LEFT JOIN – 왼쪽 테이블을 기준으로 조회

📌 LEFT JOIN왼쪽 테이블(첫 번째 테이블)의 모든 데이터를 가져오고,
오른쪽 테이블에 일치하는 데이터가 없으면 NULL을 반환합니다.

LEFT JOIN 문법

SELECT e.emp_id, e.name, d.dept_name
FROM employees e
LEFT JOIN departments d
ON e.dept_id = d.dept_id;

🔸 결과 (employees 테이블을 기준으로 조회됨)

emp_idnamedept_name
1AliceIT
2BobHR
3CharlieNULL
4DavidNULL

LEFT JOIN이므로 employees 테이블의 모든 데이터가 표시됨
Charlie(103)와 David(NULL)는 departments에 일치하는 데이터가 없으므로 NULL 표시


🔹 4. RIGHT JOIN – 오른쪽 테이블을 기준으로 조회

📌 RIGHT JOIN오른쪽 테이블(두 번째 테이블)의 모든 데이터를 가져오고,
왼쪽 테이블에 일치하는 데이터가 없으면 NULL을 반환합니다.

RIGHT JOIN 문법

SELECT e.emp_id, e.name, d.dept_name
FROM employees e
RIGHT JOIN departments d
ON e.dept_id = d.dept_id;

🔸 결과 (departments 테이블을 기준으로 조회됨)

emp_idnamedept_name
1AliceIT
2BobHR
NULLNULLFinance

RIGHT JOIN이므로 departments 테이블의 모든 데이터가 표시됨
Finance(104)는 employees 테이블에 일치하는 데이터가 없으므로 NULL 표시


🔹 5. FULL JOIN – 모든 데이터 조회

📌 FULL JOIN (FULL OUTER JOIN)두 테이블의 모든 데이터를 가져오며,
일치하지 않는 값은 NULL로 표시
합니다.

FULL JOIN 문법

SELECT e.emp_id, e.name, d.dept_name
FROM employees e
FULL JOIN departments d
ON e.dept_id = d.dept_id;

🔸 결과 (모든 데이터가 포함됨)

emp_idnamedept_name
1AliceIT
2BobHR
3CharlieNULL
4DavidNULL
NULLNULLFinance

employees와 departments 테이블의 모든 데이터가 표시됨
일치하지 않는 데이터는 NULL로 표시됨


🔹 6. JOIN 비교 요약 정리

JOIN 종류 기준테이블일치하는 데이터일치하지 않는 데이터
INNER JOIN양쪽 테이블✅ 포함❌ 제외
LEFT JOIN왼쪽 테이블✅ 포함🔹 왼쪽 테이블 유지, 오른쪽 NULL
RIGHT JOIN오른쪽 테이블✅ 포함🔹 오른쪽 테이블 유지, 왼쪽 NULL
FULL JOIN양쪽 테이블✅ 포함🔹 왼쪽 & 오른쪽 모두 NULL 표시

🔹 7. JOIN을 활용한 실전 예제

부서별 직원 수를 구하는 예제 (LEFT JOIN + GROUP BY)

SELECT d.dept_name, COUNT(e.emp_id) AS employee_count
FROM departments d
LEFT JOIN employees e
ON d.dept_id = e.dept_id
GROUP BY d.dept_name;
  • LEFT JOIN을 사용하여 부서를 기준으로 직원 수를 계산
  • 직원이 없는 부서도 포함되도록 LEFT JOIN 사용

📌 핵심 정리
✔ INNER JOIN → 공통된 데이터만 조회
✔ LEFT JOIN → 왼쪽(첫 번째) 테이블 기준, 일치하지 않는 데이터는 NULL
✔ RIGHT JOIN → 오른쪽(두 번째) 테이블 기준, 일치하지 않는 데이터는 NULL
✔ FULL JOIN → 양쪽 테이블의 모든 데이터를 가져오고, 일치하지 않으면 NULL
SQL 실습을 통해 JOIN을 직접 사용해 보세요! 😊

반응형