오봉이와 함께하는 개발 블로그

Querydsl - 조인 (기본 조인) 본문

BE/JPA

Querydsl - 조인 (기본 조인)

오봉봉이 2022. 9. 17. 21:50
728x90

조인 - 기본 조인

기본 조인

조인의 기본 문법은 첫 번째 파라미터에 조인 대상을 지정하고, 두 번째 파라미터에 별칭(alias)으로 사용할 Q 타입을 지정하면 된다.

join(조인 대상, 별칭으로 사용할 Q타입)

테스트

/*
* 팀 A에 소속된 모든 회원 조회
* */
@Test
void join() {
    List<Member> result = queryFactory
            .selectFrom(member)
            .join(member.team, team)
            .where(team.name.eq("teamA"))
            .fetch();
    assertThat(result)
            .extracting("username")
            .containsExactly("member1", "member2");
}
  • join(), innerJoin() : 내부 조인(inner join)
  • leftJoin() : left 외부 조인(left outer join)
  • rightJoin() : rigth 외부 조인(rigth outer join)
  • JPQL의 on과 성능 최적화를 위한 fetch 조인 제공
select member1
from Member member1
inner join member1.team as team
where team.name = ?1

select member0_.member_id as member_i1_1_, member0_.age as age2_1_, member0_.team_id as team_id4_1_, member0_.username as username3_1_
from member member0_
inner join team team1_
on member0_.team_id=team1_.team_id
where team1_.name=?

세타 조인

연관관계가 없는 필드로 조인

테스트

/*
* 세타 조인(연관관계가 없는 필드로 조인)
* 회원의 이름이 팀 이람고ㅘ 같은 회원 조회
* */
@Test
void theta_join() {
    em.persist(new Member("teamA"));
    em.persist(new Member("teamB"));
    List<Member> result = queryFactory
            .select(member)
            .from(member, team)
            .where(member.username.eq(team.name))
            .fetch();
    assertThat(result)
            .extracting("username")
            .containsExactly("teamA", "teamB");
}
  • from 절에 여러 엔티티를 선택해서 세타 조인
  • 외부 조인 불가능
    • 하지만, 조인 on을 사용하면 외부 조인 가능
select member1
from Member member1, Team team
where member1.username = team.name

select member0_.member_id as member_i1_1_, member0_.age as age2_1_, member0_.team_id as team_id4_1_, member0_.username as username3_1_
from member member0_
cross join team team1_
where member0_.username=team1_.name
인프런 김영한 지식공유자님 강의 : 실전! Querydsl
728x90

'BE > JPA' 카테고리의 다른 글

Querydsl - 조인 (페치 조인)  (0) 2022.09.17
Querydsl - 조인 (on 절)  (0) 2022.09.17
Querydsl - 집합  (0) 2022.09.16
Querydsl - 페이징  (0) 2022.09.16
Querydsl - 정렬  (0) 2022.09.16
Comments