SQL JOIN 종류 정리

송현진·2025년 7월 11일

SQL

목록 보기
17/17

조인이란?

조인(JOIN)이란 두 개 이상의 테이블을 공통된 컬럼을 기준으로 묶어 하나의 결과로 만드는 SQL 연산이다. 보통은 외래 키(Foreign Key) 관계를 기반으로 두 테이블 간의 관계를 정의하고 이를 통해 유의미한 데이터를 결합해 사용할 수 있다.

조인 종류의미기준 테이블 기준결과 포함 범위
INNER JOIN교집합 (양쪽에 모두 있는 데이터만)기준 상관 없음양쪽 모두 일치하는 행만
LEFT OUTER JOIN기준 테이블 + 매칭되는 행 (없으면 NULL)왼쪽 테이블왼쪽 테이블 전체 + 일치 데이터
RIGHT OUTER JOIN기준 테이블 + 매칭되는 행 (없으면 NULL)오른쪽 테이블오른쪽 테이블 전체 + 일치 데이터
FULL OUTER JOIN양쪽 테이블 모두 포함양쪽 다모든 행 포함 + NULL 보완

OUTER는 생략 가능하다. 예: LEFT JOIN, RIGHT JOIN

예시 테이블

students 테이블
id name
1 Alice
2 Bob
3 Charlie
scores 테이블
student_id score
1 85
2 92
4 78

INNER JOIN

SELECT *
FROM students s
INNER JOIN scores sc
ON s.id = sc.student_id;

결과 테이블

id name student_id score
1 Alice 1 85
2 Bob 2 92

양쪽 테이블 모두에 매칭되는 데이터만 출력됨. (id = student_id)

조인 구조 이미지

INNER JOIN

LEFT JOIN

SELECT *
FROM students s
LEFT JOIN scores sc
ON s.id = sc.student_id;

결과 테이블

id name student_id score
1 Alice 1 85
2 Bob 2 92
3 Charlie NULL NULL

students 기준이므로 왼쪽 테이블 전체 + 매칭 안 되는 오른쪽 값은 NULL.

조인 구조 이미지

LEFT JOIN

RIGHT JOIN

SELECT *
FROM students s
RIGHT JOIN scores sc
ON s.id = sc.student_id;

결과 테이블

id name student_id score
1 Alice 1 85
2 Bob 2 92
NULL NULL 4 78

scores 기준이므로 오른쪽 테이블 전체 + 매칭 안 되는 왼쪽 값은 NULL.

조인 구조 이미지

RIGHT JOIN

FULL OUTER JOIN (DBMS에 따라 지원 안 될 수도 있음)

SELECT *
FROM students s
FULL OUTER JOIN scores sc
ON s.id = sc.student_id;

MySQL은 FULL OUTER JOIN을 직접 지원하지 않기 때문에 대안으로 UNION을 사용한다.

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;

결과 테이블

id name student_id score
1 Alice 1 85
2 Bob 2 92
3 Charlie NULL NULL
NULL NULL 4 78

양쪽 테이블 전체 포함 + 매칭 안 된 부분은 NULL로 표시됨.

조인 구조 이미지

FULL OUTER JOIN

📝 배운점

여러 테이블을 조인할 때는 기준이 되는 테이블을 정하고 그에 따라 차례대로 조인을 이어 나가는 방식으로 설계해야 한다. 테이블 간 관계를 명확하게 파악한 뒤 JOIN 조건을 적절히 설정하면 원하는 데이터를 하나의 결과로 효과적으로 조회할 수 있다. 이 과정에서 INNER JOIN, LEFT JOIN을 혼용하여 원하는 범위의 데이터를 유연하게 추출할 수 있다는 점이 인상 깊었다. 특히 세 개 이상의 테이블을 조인할 때는 중간 테이블이 누락되면 전체 데이터가 끊길 수 있으므로 항상 중간 결과를 출력해보며 디버깅하는 습관이 중요하다는 걸 배웠다.

또한 가독성을 위해 별칭을 사용하고 JOIN 순서를 논리적으로 구성하는 것이 유지보수와 협업에 큰 도움이 된다는 것을 느꼈다. JOIN은 단순한 테이블 결합을 넘어서 관계형 데이터 모델의 강력함을 실감할 수 있는 도구임을 다시 한 번 체감했다.


참고

profile
개발자가 되고 싶은 취준생

0개의 댓글