Posts [자바 ORM 표준 JPA 프로그래밍-기본편] 조인
Post
Cancel

[자바 ORM 표준 JPA 프로그래밍-기본편] 조인

본 포스팅은 인프러의 JPA 기본편을 수강하고 정리하는 내용입니다.


조인

엔티티를 중심으로 동작한다. 객체 스타일의 문법이다.

  • 내부 조인:
    • SELECT m FROM Member m [INNER] JOIN m.team t
    • member있고 team이 없으면 데이터가 아예 안나옴(교집합)
      1
      2
      3
      
      String query = "select m from Member m inner join Team t where m.username = t.name";
      List<Member> result = em.createQuery(query, Member.class)
            .getResultList();
      
  • 외부 조인:
    • SELECT m FROM Member m LEFT [OUTER] JOIN m.team t
    • 회원은 있고 팀이 없어도 멤버는 조회가 됨(합집합)
      1
      2
      3
      
      String query = "select m from Member m left outer join Team t where m.username = t.name";
      List<Member> result = em.createQuery(query, Member.class)
            .getResultList();
      
  • 세타 조인:
    • select count(m) from Member m, Team t where m.username = t.name
    • 연관관계가 전혀 없는 것을 막 비교해보고 싶을때 사용
      1
      2
      3
      
      String query = "select m from Member m, Team t where m.username = t.name";
      List<Member> result = em.createQuery(query, Member.class)
            .getResultList();
      

조인 - ON 절

  • ON절을 활용한 조인(JPA 2.1부터 지원)
    • 1)조인 대상 필터링
    • 2)연관관계 없는 엔티티 외부 조인(하이버네이트 5.1부터)

1. 조인 대상 필터링

  • 예) 회원과 팀을 조인하면서, 팀 이름이 A인 팀만 조인
    • 조인 대상을 필터링 먼저 한 후 조인하는 방식
1
2
3
4
5
6
JPQL:
SELECT m, t FROM Member m LEFT JOIN m.team t on t.name = 'A'

SQL:
SELECT m.*, t.* FROM
Member m LEFT JOIN Team t ON m.TEAM_ID=t.id and t.name='A'

2. 연관관계 없는 엔티티 외부 조인

  • 예) 회원의 이름과 팀의 이름이 같은 대상 외부 조인
1
2
3
4
5
6
7
JPQL:
SELECT m, t FROM
Member m LEFT JOIN Team t on m.username = t.name

SQL:
SELECT m.*, t.* FROM
Member m LEFT JOIN Team t ON m.username = t.name
This post is licensed under CC BY 4.0 by the author.

[자바 ORM 표준 JPA 프로그래밍-기본편] 페이징

[자바 ORM 표준 JPA 프로그래밍-기본편] 서브 쿼리