이너 조인(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
테이블의id
와Order
테이블의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
테이블의 모든 행이 결과에 포함됩니다.Bob
은Order
테이블에 관련된 주문이 없기 때문에order_date
에NULL
이 반환됩니다.Order
테이블에customer_id
가 4인 행은Customer
테이블에 일치하는 고객이 없으므로 결과에 포함되지 않습니다.
주요 차이점 요약
구분 | 이너 조인 (Inner Join) | 레프트 조인 (Left Join) |
---|---|---|
포함되는 데이터 | 두 테이블에서 조인 조건에 맞는 일치하는 데이터만 포함 | 왼쪽 테이블의 모든 데이터를 포함하고, 오른쪽 테이블에 일치하지 않는 데이터는 NULL 로 표시 |
데이터 손실 | 일치하지 않는 데이터는 결과에서 제외 | 왼쪽 테이블의 모든 데이터가 포함되므로 데이터 손실 없음 |
언제 사용해야 할까?
- 이너 조인은 두 테이블에서 모두 일치하는 데이터만 필요한 경우에 사용합니다. 예를 들어, 고객과 주문이 있는 경우, 주문이 있는 고객에 대해서만 데이터를 조회하고 싶다면 이너 조인을 사용합니다.
- 레프트 조인은 왼쪽 테이블에 있는 모든 데이터가 필요하고, 오른쪽 테이블에 데이터가 없을 때도 결과를 보고 싶을 때 사용합니다. 예를 들어, 모든 고객 목록을 보고 싶지만, 주문이 없는 고객도 포함해야 한다면 레프트 조인을 사용합니다.
이러한 차이점을 고려해 상황에 맞게 조인 방식을 선택할 수 있습니다.
'JPA' 카테고리의 다른 글
더티 체킹(Dirty Checking) ( 변경 감지 ) (1) | 2024.09.23 |
---|---|
서브쿼리 (Subquery) (1) | 2024.09.23 |
JPA 자동생성전략 3가지방법 ( IDENTITY, SEQUENCE, TABLE ) (2) | 2024.09.11 |
JPA가 제공하는 주요 CRUD 기능 (0) | 2024.09.10 |
데이터베이스 영속화 (0) | 2024.09.10 |