INNER JOIN과 OUTER JOIN, 뭐가 다를까? 실무에서 꼭 알아야 할 차이점
INNER JOIN과 OUTER JOIN, 뭐가 다를까? 실무에서 꼭 알아야 할 차이점
SQL에서 여러 테이블의 데이터를 함께 조회할 때 JOIN을 사용합니다. 하지만 JOIN에는 여러 종류가 있어서 처음 접하는 분들은 헷갈리기 쉽습니다. 특히 INNER JOIN과 OUTER JOIN의 차이를 정확히 이해하는 것은 실무에서 매우 중요합니다. 이번 글에서는 이 두 JOIN의 차이점과 사용 예시를 통해 개념을 확실히 잡아보겠습니다.
1. INNER JOIN – 교집합 찾기
INNER JOIN은 두 테이블에서 공통된 값이 있는 행만 반환합니다. 즉, 양쪽 테이블에 모두 존재하는 데이터만 조회하고, 한쪽에만 있는 데이터는 제외됩니다.
예제:
employees
테이블과 departments
테이블이 있다고 가정해봅시다.
employees
테이블:employee_id name department_id 1 철수 10 2 영희 20 3 민수 30 departments
테이블:department_id department_name 10 인사부 20 개발부 40 마케팅부
이제 두 테이블을 department_id
를 기준으로 INNER JOIN 해보겠습니다.
SELECT e.name, d.department_name
FROM employees e
INNER JOIN departments d ON e.department_id = d.department_id;
결과:
| name | department_name |
|-------|-----------------|
| 철수 | 인사부 |
| 영희 | 개발부 |
여기서 민수
와 마케팅부
는 각각 다른 테이블에만 존재하므로 결과에서 제외되었습니다.
2. OUTER JOIN – 전체 데이터 조회하기
OUTER JOIN은 한쪽 테이블에만 존재하는 데이터도 포함하여 조회합니다. OUTER JOIN은 다시 LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN으로 나뉩니다.
- LEFT OUTER JOIN: 왼쪽 테이블의 모든 행을 반환하고, 오른쪽 테이블에 일치하는 데이터가 없으면 NULL을 반환합니다.
- RIGHT OUTER JOIN: 오른쪽 테이블의 모든 행을 반환하고, 왼쪽 테이블에 일치하는 데이터가 없으면 NULL을 반환합니다.
- FULL OUTER JOIN: 양쪽 테이블의 모든 행을 반환하며, 일치하는 데이터가 없으면 NULL을 반환합니다.
예제:
위의 employees
와 departments
테이블을 LEFT OUTER JOIN 해보겠습니다.
SELECT e.name, d.department_name
FROM employees e
LEFT OUTER JOIN departments d ON e.department_id = d.department_id;
결과:
| name | department_name |
|-------|-----------------|
| 철수 | 인사부 |
| 영희 | 개발부 |
| 민수 | NULL |
민수
는 employees
테이블에는 있지만 departments
테이블에 해당 department_id
가 없으므로 department_name
이 NULL로 표시됩니다.
✅ 마무리
- INNER JOIN: 양쪽 테이블에 모두 존재하는 데이터만 조회
- OUTER JOIN:
- LEFT OUTER JOIN: 왼쪽 테이블의 모든 데이터와 일치하는 오른쪽 테이블의 데이터 조회
- RIGHT OUTER JOIN: 오른쪽 테이블의 모든 데이터와 일치하는 왼쪽 테이블의 데이터 조회
- FULL OUTER JOIN: 양쪽 테이블의 모든 데이터 조회
JOIN을 적절히 사용하면 데이터베이스에서 원하는 정보를 효율적으로 추출할 수 있습니다. 실무에서는 데이터의 특성과 요구사항에 맞게 JOIN을 선택하여 사용해야 합니다.
#SQL #JOIN #INNERJOIN #OUTERJOIN #데이터베이스 #기초문법 #실무팁
'SQL 기초 정리' 카테고리의 다른 글
SELECT *를 쓰면 왜 안 좋을까? 실무에서 컬럼을 명시하는 이유 (0) | 2025.04.10 |
---|---|
NULL은 0이 아니다! SQL에서 NULL이 가진 의미와 주의점 (0) | 2025.04.10 |
WHERE 절 조건의 순서가 성능에 영향을 줄까? (0) | 2025.04.10 |
GROUP BY와 ORDER BY의 차이는 뭘까? 비슷해 보이지만 전혀 다른 역할 (0) | 2025.04.09 |
DISTINCT는 정말 중복만 제거할까? 사용 시 주의해야 할 3가지 포인트 (0) | 2025.04.08 |