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을 통해 연결된 데이터를 자유롭게 조회할 수 있게 됩니다.
'프로그래밍' 카테고리의 다른 글
서브쿼리와 인라인 뷰 – SQLD 필수 개념 정리 (2) | 2025.08.05 |
---|---|
GROUP 함수와 집계 처리 – SQLD 완벽 정리 (2) | 2025.08.05 |
SELECT 구문과 조건절 완전정복 (4) | 2025.08.04 |
SQL 기본 문법 총정리 (DDL, DML, DCL) (0) | 2025.08.02 |
데이터 무결성과 제약조건: 정확하고 신뢰할 수 있는 데이터베이스의 기반 (1) | 2025.08.02 |