본문 바로가기
프로그래밍

JOIN의 모든 것 – 관계형 데이터베이스의 핵심 연결 기술

by 유형제맘 2025. 8. 4.

SQL에서 여러 테이블에 나눠 저장된 데이터를 하나로 합쳐서 조회하고 싶을 때 사용하는 것이 바로 JOIN입니다. JOIN은 관계형 데이터베이스의 가장 강력한 기능 중 하나이며, SQLD 시험에서도 빈출 파트에 속합니다.

1. JOIN이란?

JOIN은 두 개 이상의 테이블을 연결하여 하나의 결과 집합으로 만들어주는 기능입니다. 예를 들어, employees 테이블에는 직원 정보가 있고, departments 테이블에는 부서 정보가 있다면, 두 테이블을 JOIN해서 직원이 소속된 부서명까지 함께 조회할 수 있습니다.

2. JOIN의 종류 정리

JOIN 종류 설명
INNER JOIN 양쪽 테이블 모두에 일치하는 데이터만 조회
LEFT OUTER JOIN 왼쪽 테이블의 모든 행 + 오른쪽과 일치하는 데이터
RIGHT OUTER JOIN 오른쪽 테이블의 모든 행 + 왼쪽과 일치하는 데이터
FULL OUTER JOIN 양쪽 테이블의 모든 데이터 포함 (MySQL은 직접 지원X)
CROSS JOIN 모든 조합 (곱집합)

3. 기본 구문

SELECT 컬럼명
FROM 테이블1
JOIN 테이블2 ON 테이블1.공통컬럼 = 테이블2.공통컬럼;

4. INNER JOIN – 가장 자주 사용됨

두 테이블 모두에 일치하는 값이 있을 때만 결과에 포함

SELECT e.emp_name, d.dept_name
FROM employees e
INNER JOIN departments d ON e.dept_id = d.dept_id;
  • 직원 테이블(e)과 부서 테이블(d)을 dept_id 기준으로 연결
  • 부서에 소속된 직원만 조회됨

5. LEFT OUTER JOIN – 왼쪽 우선

왼쪽 테이블의 모든 데이터는 출력하고, 오른쪽 테이블에 일치하는 게 있으면 붙여줌

SELECT e.emp_name, d.dept_name
FROM employees e
LEFT OUTER JOIN departments d ON e.dept_id = d.dept_id;
  • 부서가 없는 직원도 함께 조회됨 → dept_name은 NULL

6. RIGHT OUTER JOIN – 오른쪽 우선

오른쪽 테이블의 모든 데이터는 출력하고, 왼쪽 테이블에 일치하는 게 있으면 붙여줌

SELECT e.emp_name, d.dept_name
FROM employees e
RIGHT OUTER JOIN departments d ON e.dept_id = d.dept_id;
  • 직원이 없는 부서도 함께 조회됨 → emp_name은 NULL

7. FULL OUTER JOIN – 전체 포함

양쪽 모두의 데이터를 포함하며, 일치하지 않는 항목은 NULL로 채움

MySQL에서는 직접 지원하지 않음. UNION으로 대체

-- MySQL에서는 FULL OUTER JOIN 대신 아래처럼 사용
SELECT e.emp_name, d.dept_name
FROM employees e
LEFT JOIN departments d ON e.dept_id = d.dept_id
UNION
SELECT e.emp_name, d.dept_name
FROM employees e
RIGHT JOIN departments d ON e.dept_id = d.dept_id;

8. CROSS JOIN – 곱집합

모든 행의 조합. 조건을 지정하지 않으면 폭발적인 결과가 나올 수 있음

SELECT e.emp_name, d.dept_name
FROM employees e
CROSS JOIN departments d;
  • 직원 수 × 부서 수 만큼 결과가 나옴
  • 실무에서는 거의 안 쓰임

9. 테이블 별칭(Alias) 사용

JOIN에서는 테이블 이름이 길 수 있기 때문에 별칭을 주어 간결하게 사용할 수 있어요.

SELECT e.emp_name, d.dept_name
FROM employees AS e
JOIN departments AS d ON e.dept_id = d.dept_id;
  • AS는 생략 가능 → employees e

10. 실전 예제

예제 테이블

  • students(student_id, name, class_id)
  • classes(class_id, class_name)

학생 이름과 반 이름을 함께 출력

SELECT s.name, c.class_name
FROM students s
JOIN classes c ON s.class_id = c.class_id;

📌 JOIN 선택 요령 정리

상황 사용해야 할 JOIN
양쪽 테이블 모두에 데이터가 있어야 하는 경우 INNER JOIN
왼쪽 테이블의 모든 데이터가 필요할 때 LEFT JOIN
오른쪽 테이블의 모든 데이터가 필요할 때 RIGHT JOIN
일치하지 않아도 모두 포함해야 할 때 FULL OUTER JOIN` (UNION 방식)

JOIN은 관계형 데이터베이스에서 핵심 중의 핵심입니다. 특히 실무에서는 INNER JOIN, LEFT JOIN이 많이 사용되며, 데이터 모델이 잘 설계되어 있다면 자연스럽게 JOIN을 통해 연결된 데이터를 자유롭게 조회할 수 있게 됩니다.