JPA JOIN

희운·2025년 4월 14일

JPA

목록 보기
1/5

좋아, 이거 블로그 글로 딱 알기 쉽게 정리해줄게 ✍️
JPQL, SQL 비교, LEFT JOIN의 개념, ON vs WHERE의 차이
깔끔한 예시와 함께 블로그 스타일로 작성해줄게!


🔍 JPQL과 SQL에서의 LEFT JOIN – ON 절과 WHERE 절 제대로 이해하기

JPQL이나 SQL을 사용할 때, LEFT JOIN의 사용법과 ON 절, WHERE 절의 차이를 정확히 이해하는 것은 실무에서 매우 중요합니다. 특히 조인 조건을 어디에 걸어야 원하는 결과를 얻을 수 있는지 헷갈리는 경우가 많죠.

이 글에서는 아래 내용을 중심으로 설명드릴게요:

  • JPQL vs SQL: 조인 조건 비교
  • LEFT JOIN의 동작 방식
  • ON 절과 WHERE 절의 차이
  • 실제 예제를 통한 차이 설명

💡 JPQL vs SQL – 조인 조건의 위치 이해하기

다음 JPQL 문을 예로 들어볼게요:

SELECT m FROM Member m
LEFT JOIN m.team t ON t.name = 'A'

이 쿼리는 아래와 같은 SQL로 해석됩니다:

SELECT m.*
FROM member m
LEFT JOIN team t ON m.team_id = t.id AND t.name = 'A'

🔹 여기서 중요한 포인트:

  • m.team t → 실제 SQL에서는 ON m.team_id = t.id에 해당 (외래 키 조인 조건)
  • ON t.name = 'A' → SQL에서는 AND t.name = 'A' 로 함께 표현

즉, JPQL에서의 JOIN m.team t ON t.name = 'A'는, SQL에서 외래 키 조건 + 필터 조건을 모두 ON절에 넣은 것과 같다는 걸 알 수 있습니다.


🧠 LEFT JOIN은 어떻게 동작할까?

LEFT JOIN은 다음과 같은 특징이 있어요:

  1. 기준 테이블(왼쪽, 여기서는 Member)의 모든 행을 유지
  2. 조인 조건에 맞는 테이블(오른쪽, 여기서는 Team)의 데이터만 매칭
  3. 조건에 맞지 않는 경우에는 오른쪽 테이블 값은 NULL로 채워짐

즉, 조인 대상(Team)을 조건으로 필터링한 뒤 LEFT JOIN을 수행하고, 조건에 맞지 않으면 null이 붙습니다.


WHERE 절과 같이 사용하면 어떤 문제가?

만약 같은 조건을 WHERE 절에 썼다면?

SELECT m FROM Member m
LEFT JOIN m.team t
WHERE t.name = 'A'

이 경우는 SQL로 보면 이렇게 됩니다:

SELECT m.*
FROM member m
LEFT JOIN team t ON m.team_id = t.id
WHERE t.name = 'A'

→ 이 쿼리는 어떤 결과를 만들까요?

🔻 t.name = 'A' 조건을 만족하지 않으면 행 자체가 제거됩니다.

결국 LEFT JOIN을 했지만, 결과적으로는 INNER JOIN과 동일한 결과가 됩니다.


🎯 핵심 정리

구분위치의미결과
✅ 올바른 방식LEFT JOIN ... ON t.name = 'A'조인할 대상 제한Member는 모두 조회, Team은 조건에 맞는 경우만 조인됨
❌ 잘못된 방식WHERE t.name = 'A'최종 결과 제한조건 안 맞는 Member는 아예 제거됨 (LEFT JOIN 의미 사라짐)

📌 정리 문장 (블로그용 포인트)

  • JPQL에서 LEFT JOIN m.team t ON t.name = 'A'는 SQL의 ON m.team_id = t.id AND t.name = 'A'와 같다.
  • LEFT JOIN은 조인 대상을 제한한 후, 기준 테이블의 모든 데이터를 유지하면서 조인을 수행한다.
  • 조건을 WHERE 절에 걸면, LEFT JOIN의 의미가 사라지고 INNER JOIN처럼 작동하므로 주의가 필요하다.

필요하면 그림이나 테이블로 시각적으로 설명하는 부분도 만들어줄 수 있어 😊
“예제 테이블 + 결과 테이블”로 보여주면 한눈에 와닿거든!
원하면 그 부분도 추가해줄까?

profile
기록하는 공간

0개의 댓글