본문 바로가기
JPA Study

이너 조인(Inner Join)과 레프트 조인(Left Join)

by xogns93 2024. 9. 20.

이너 조인(Inner Join)레프트 조인(Left Join)은 SQL에서 두 개 이상의 테이블을 결합할 때 사용하는 조인의 유형입니다. 이 둘의 가장 큰 차이점은 조인 후 결과에 포함되는 행의 기준에 있습니다.

1. 이너 조인(Inner Join)

이너 조인은 두 테이블에서 일치하는 데이터만 가져옵니다. 즉, 조인 조건에 맞는 행들만 결과에 포함됩니다. 일치하지 않는 데이터는 무시됩니다.

예시:

Customer 테이블과 Order 테이블이 있다고 가정해봅시다.

  • Customer 테이블:
  • id | name ----|-------- 1 | John 2 | Alice 3 | Bob
  • Order 테이블:
  • id | customer_id | order_date ----|--------------|------------ 1 | 1 | 2023-01-01 2 | 2 | 2023-01-02 3 | 4 | 2023-01-03

이제, 두 테이블을 customer_id를 기준으로 이너 조인한다고 가정하면, 두 테이블에서 일치하는 데이터만 결과에 포함됩니다.

SELECT Customer.id, Customer.name, Order.order_date
FROM Customer
INNER JOIN Order ON Customer.id = Order.customer_id;

결과:

id  | name  | order_date
----|-------|------------
1   | John  | 2023-01-01
2   | Alice | 2023-01-02

설명:

  • Customer 테이블의 idOrder 테이블의 customer_id가 일치하는 경우만 결과에 포함됩니다.
  • Customer에 있는 Bob은 Order 테이블에 관련된 주문이 없으므로 결과에 포함되지 않습니다.
  • Order 테이블에서 customer_id가 4인 행은 Customer 테이블에 일치하는 고객이 없으므로 결과에서 제외됩니다.

2. 레프트 조인(Left Join)

레프트 조인왼쪽 테이블의 모든 행을 결과에 포함시키고, 오른쪽 테이블에 일치하는 데이터가 없으면 NULL을 반환합니다. 즉, 왼쪽 테이블의 모든 데이터는 무조건 포함되며, 오른쪽 테이블에 일치하는 데이터가 있으면 그 데이터도 함께 가져옵니다.

동일한 예시로 레프트 조인:

SELECT Customer.id, Customer.name, Order.order_date
FROM Customer
LEFT JOIN Order ON Customer.id = Order.customer_id;

결과:

id  | name  | order_date
----|-------|------------
1   | John  | 2023-01-01
2   | Alice | 2023-01-02
3   | Bob   | NULL

설명:

  • Customer 테이블의 모든 행이 결과에 포함됩니다.
  • BobOrder 테이블에 관련된 주문이 없기 때문에 order_dateNULL이 반환됩니다.
  • Order 테이블에 customer_id가 4인 행은 Customer 테이블에 일치하는 고객이 없으므로 결과에 포함되지 않습니다.

주요 차이점 요약

구분 이너 조인 (Inner Join) 레프트 조인 (Left Join)
포함되는 데이터 두 테이블에서 조인 조건에 맞는 일치하는 데이터만 포함 왼쪽 테이블의 모든 데이터를 포함하고, 오른쪽 테이블에 일치하지 않는 데이터는 NULL로 표시
데이터 손실 일치하지 않는 데이터는 결과에서 제외 왼쪽 테이블의 모든 데이터가 포함되므로 데이터 손실 없음

언제 사용해야 할까?

  • 이너 조인은 두 테이블에서 모두 일치하는 데이터만 필요한 경우에 사용합니다. 예를 들어, 고객과 주문이 있는 경우, 주문이 있는 고객에 대해서만 데이터를 조회하고 싶다면 이너 조인을 사용합니다.
  • 레프트 조인은 왼쪽 테이블에 있는 모든 데이터가 필요하고, 오른쪽 테이블에 데이터가 없을 때도 결과를 보고 싶을 때 사용합니다. 예를 들어, 모든 고객 목록을 보고 싶지만, 주문이 없는 고객도 포함해야 한다면 레프트 조인을 사용합니다.

이러한 차이점을 고려해 상황에 맞게 조인 방식을 선택할 수 있습니다.