조인(JOIN)의 개념과 종류

SEPTEMBER·2025년 1월 29일

1. 조인(JOIN)이란?

관계형 데이터베이스에서 JOIN(조인)은 두 개 이상의 테이블을 결합하여 원하는 데이터를 조회하는 기법입니다. 조인을 사용하면 여러 테이블에서 필요한 데이터를 가져와 하나의 결과 집합으로 반환할 수 있습니다.

예를 들어, 회원(Member) 테이블과 주문(Order) 테이블이 있을 때, 특정 회원이 한 주문 목록을 조회하려면 두 테이블을 조인해야 합니다.

2. 조인의 종류

조인은 여러 방식으로 데이터를 결합할 수 있으며, 대표적으로 INNER JOIN, OUTER JOIN, CROSS JOIN 등이 있습니다. 각각의 방식을 아래의 공통 예제를 통해 정리해보도록 하겠습니다.

< 회원(Member) 테이블 >

idname
1kim
2lee
3choi

< 주문(Order) 테이블 >

idmember_idorder_date
112025-01-29
212025-01-29
332025-01-29

(1) INNER JOIN

  • 두 테이블에서 공통된 데이터(교집합)만 반환하는 조인
  • 즉, 조인 조건에 맞는 데이터만 결과에 포함

< sql문 >

SELECT M.id, M.name, O.order_id, O.order_date
FROM Member M
INNER JOIN Orders O 
ON M.id = O.member_id;

*참고: INNER JOIN에서 INNER 생략 가능

< INNER JOIN 결과 >

idnameorder_idorder_date
1kim12025-01-29
1kim22025-01-29
3choi32025-01-29
  • lee는 주문이 없으므로 결과에 포함되지 않음

(2) LEFT JOIN(= LEFT OUTER JOIN)

  • LEFT 테이블(첫 번째 테이블)의 모든 데이터를 가져오고, RIGHT 테이블(두 번째 테이블)의 데이터가 없으면 NULL 반환

< sql문 >

SELECT M.id, M.name, O.order_id, O.order_date
FROM Member M
LEFT JOIN Orders O 
ON M.id = O.member_id;

< LEFT JOIN 결과 >

idnameorder_idorder_date
1kim12025-01-29
1kim22025-01-29
2leeNULLNULL
3choi32025-01-29
  • lee는 주문이 없지만, LEFT JOIN에서는 왼쪽 테이블(Member) 기준으로 모든 데이터가 포함되므로 NULL이 들어감

(3) RIGHT JOIN(= RIGHT OUTER JOIN)

  • RIGHT 테이블(두 번째 테이블)의 모든 데이터를 가져오고, LEFT 테이블(첫 번째 테이블)의 데이터가 없으면 NULL 반환

< sql문 >

SELECT M.id, M.name, O.order_id, O.order_date
FROM Member M
RIGHT JOIN Orders O 
ON M.id = O.member_id;

< RIGHT JOIN 결과 >

idnameorder_idorder_date
1kim12025-01-29
1kim22025-01-29
3choi32025-01-29
  • lee는 주문하지 않았으므로 Member 테이블에 있더라도 RIGHT JOIN에 포함되지 않음

(4) FULL JOIN(= FULL OUTER JOIN)

  • LEFT JOIN + RIGHT JOIN의 개념으로, 두 테이블의 모든 데이터를 가져오되, 일치하는 데이터가 없으면 NULL로 처리

< sql문 >

SELECT M.id, M.name, O.order_id, O.order_date
FROM Member M
FULL OUTER JOIN Orders O 
ON M.id = O.member_id;

< FULL OUTER JOIN 결과 >

idnameorder_idorder_date
1kim12025-01-29
1kim22025-01-29
2leeNULLNULL
3choi32025-01-29

(5) CROSS JOIN

  • 두 테이블의 모든 데이터를 곱집합(카테시안 곱, Cartesian Product)으로 반환
  • 조인 조건 없이 실행하면, 모든 조합의 데이터를 생성

< sql문 >

SELECT M.id, M.name, O.order_id, O.order_date
FROM Member M
CROSS JOIN Orders O;

< CROSS JOIN 결과 >

idnameorder_idorder_date
1kim12025-01-29
1kim22025-01-29
1kim32025-01-29
2lee12025-01-29
2lee22025-01-29
2lee32025-01-29
3choi12025-01-29
3choi22025-01-29
3choi32025-01-29
  • (총 회원 수 × 주문 수) 만큼 결과 반환
  • 회원 3 × 주문 3 = 행 9개

(6) 참고: 콤마(,)를 사용한 암시적 조인

< sql문 >

SELECT M.*, O.*
FROM Member M, Orders O;
  • FROM 절에 여러 개의 테이블을 ' , '로 나열하면, 조인 조건이 없는 CROSS JOIN과 결과가 동일함
  • 즉, 두 테이블의 모든 데이터를 곱집합(카테시안 곱, Cartesian Product)으로 반환

0개의 댓글