본문 바로가기
[JAVA]/JPA

JPQL - JOIN

by 팡펑퐁 2023. 5. 1.
728x90

내부 조인

SELECT m FROM Member m [INNER] JOIN m.team t

외부 조인

SELECT m FROM Member m LEFT [OUTER] JOIN m.team t

세타 조인

SELECT count(m) FROM Member m, Team t WHERE m.username = t.name

FROM Member m, Team t로 하면 카테시안 곱으로 전부 곱한 테이블에서 WHERE 절의 조건에 맞는 데이터가 필터링된다.

 

 

ON 절

  • ON 절을 활용한 조인 조건 추가(JPA 2.1부터 지원)
    • 1. 조인 대상 필터링
      • 예) 회원과 팀을 조인하면서, 팀 이름이 A인 팀만 조인
      • JPQL
        • SELECT m, t FROM Member m LEFT JOIN m.team t ON t.name = 'A'
        • 멤버와 팀을 조인하고 팀의 이름이 'A'인 멤버만 멤버와 팀을 select한다.
      • SQL
        • SELECT m.*, t.* FROM MEMBER m LEFT JOIN Team t ON m.TEAM_ID=t.id and t.name='A'
    • 2. 연관관계없는 엔티티 외부 조인(하이버네이트 5.1부터)
      • 예) 회원의 이름과 팀의 이름이 같은 대상 외부 조인
      • JPQL
        • SELECT m, t FROM Member m LEFT JOIN Team on m.username=t.name
      • SQL
        • SELECT m.*, t.* FROM Member m LEFT JOIN Team t ON m.username=t.name
        • 아무 연관관계가 없어도 LEFT JOIN을 할 수 있다.

 

 

 

참고

김영한 - 자바 ORM 표준 JPA 프로그래밍

 

 

728x90

'[JAVA] > JPA' 카테고리의 다른 글

JPQL - 타입 표현과 기타식  (0) 2023.05.01
JPQL - 서브 쿼리  (0) 2023.05.01
JPQL - 페이징 API  (0) 2023.05.01
JPQL - 프로젝션  (0) 2023.05.01
JPA가 지원하는 다양한 쿼리 방법(JPQL, QueryDSL 등)  (0) 2023.04.22