코-딩/SQL
SQL - JOIN
ㅋㅂㅋ
2025. 7. 22. 14:27
INNER JOIN (일치하는 행만)
- 양쪽 테이블에 모두 존재하는 데이터만 출력
SELECT *
FROM students s
INNER JOIN scores sc
ON s.id = sc.student_id;
LEFT JOIN (왼쪽 기준, 오른쪽은 없어도 됨)
- students에는 있지만 scores에는 없는 학생도 포함 (이 경우 NULL이 나옴)
SELECT *
FROM students s
LEFT JOIN scores sc
ON s.id = sc.student_id;
RIGHT JOIN (오른쪽 기준, 왼쪽은 없어도 됨)
- scores에는 있지만 students에 없는 경우도 포함됨
SELECT *
FROM students s
RIGHT JOIN scores sc
ON s.id = sc.student_id;
FULL OUTER JOIN (둘 다 기준, 일치하지 않아도 모두 출력)
- 왼쪽, 오른쪽 모두 포함하고 일치하지 않으면 NULL로 채움
- 일부 DB에서는 FULL OUTER JOIN을 지원하지 않음
SELECT *
FROM students s
FULL OUTER JOIN scores sc
ON s.id = sc.student_id;
- full outer join을 지원하지 않는다면 UNION 을 사용한다. (중복 제거. 중복 제거 불필요시 UNION ALL)
SELECT *
FROM students s
LEFT JOIN scores sc
ON s.id = sc.student_id;
UNION
SELECT *
FROM students s
RIGHT JOIN scores sc
ON s.id = sc.student_id;
UNION / UNION ALL
- UNION은 내부적으로 SORT하거나 GROUP BY처럼 작동하여 중복을 제거.
- UNION ALL은 중복 제거 없이 전체 합치기만
중복을 신경 쓸 필요 없는 로그성 데이터, 집계 전 중간 데이터 결합, 성능이 중요한 대용량 데이터의 경우 UNION ALL이 더 효율적이다.
CROSS JOIN (모든 조합)
- 학생 수 × 과목 수 만큼 결과가 나옴 (곱집합)
SELECT *
FROM students s
CROSS JOIN subjects sub;
가능한 모든 조합을 만들어야 하는 상황, 카테고리나 날짜 조합의 생성, 통계 분석이나 시뮬레이션 시에 사용한다.