@Test
public void join() {
List<Member> result = queryFactory
.selectFrom(member)
.join(member.team, team)
.where(team.name.eq("teamA"))
.fetch();
assertThat(result.size()).isEqualTo(2);
assertThat(result)
.extracting("username")
.containsExactly("member1", "member2");
}
연관 관계가 없는 세타조인도 가능하다.
/**
* 회원의 이름이 팀 이름과 같은 회원 조회
*/
@Test
public void theta_join() {
em.persist(new Member("teamA"));
em.persist(new Member("teamB"));
em.persist(new Member("teamC"));
List<Member> result = queryFactory
.select(member)
.from(member, team)
.where(member.username.eq(team.name))
.fetch();
assertThat(result.size()).isEqualTo(2);
assertThat(result)
.extracting("username")
.containsExactly("teamA", "teamB");
}
프롬 절에 여러 엔티티를 선택해서 세타 조인을 할 수 있다.
기본적으로 outer 조인이 불가능 하다.
cross 조인으로 카테시안 곱으로 모든 데이터를 가져와서 조인한다.