DOing
[Querydsl] Join ๋ณธ๋ฌธ
๐ Join
: join(์กฐ์ธ ๋์, ๋ณ์นญ) ๊ณผ ๊ฐ์ ํ์์ ๊ฐ์ง๋ฉด ๋๋ค.
: ์ง์ํ๋ Join์ ์ข ๋ฅ
- join() , innerJoin() : ๋ด๋ถ ์กฐ์ธ(inner join)
- leftJoin() : left ์ธ๋ถ ์กฐ์ธ(left outer join)
- rightJoin() : rigth ์ธ๋ถ ์กฐ์ธ(rigth outer join)
๐ ๋ด๋ถ ์กฐ์ธ(inner join)
๋ด๋ถ ์กฐ์ธ(inner join)์ ๊ฒฝ์ฐ, on ์ ์ ํ์ฉํด ์กฐ์ธ ๋์์ ํํฐ๋ง ํ๋ ๊ฒ๊ณผwhere ์ ์์ ํํฐ๋ง ํ๋ ๊ฒ๊ณผ ๊ธฐ๋ฅ์ด ๋์ผํ๋ค!!!
@Test
public void join() throws Exception {
QMember member = QMember.member;
QTeam team = QTeam.team;
List<Member> result = queryFactory
.selectFrom(member)
.join(member.team, team)
//.on(team.name.eq("teamA"))
.where(team.name.eq("teamA"))
.fetch();
assertThat(result)
.extracting("username")
.containsExactly("member1", "member2");
}
๐ ์ฐ๊ด ๊ด๊ณ๊ฐ ์๋ ํ๋๋ก ์กฐ์ธ
1. ๋ด๋ถ ์กฐ์ธ (์ธํ ์กฐ์ธ)
: ์ฐ๊ด๊ด๊ณ๊ฐ ์๋ ํ๋๋ก๋ ์กฐ์ธ์ด ๊ฐ๋ฅํ๋ค.
: from ์ ์ ์ฌ๋ฌ ์ํฐํฐ๋ฅผ ์ ํํด์ ์ธํ ์กฐ์ธ
: cross join์ผ๋ก ์ฟผ๋ฆฌ๊ฐ ๋๊ฐ๋ค.
@Test
public void theta_join() throws Exception {
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");
}
2. ์ธ๋ถ ์กฐ์ธ
: ์ฃผ์ํด์ผํ ์ ์ leftJoin์ member.team์ด ์๋ team์ด ๋ค์ด๊ฐ๋ ์ ์ด๋ค.
๋๋ฌธ์ leftJoin(member.team)์์๋ ์ฟผ๋ฆฌ๊ฐ on member.team_id=team.id๊ฐ ์ถ๊ฐ๋์ง๋ง leftJoin(team)์์๋ ๊ทธ๋ ์ง ์๋ค.
@Test
public void join_on_no_relation() throws Exception {
em.persist(new Member("teamA"));
em.persist(new Member("teamB"));
List<Tuple> result = queryFactory
.select(member, team)
.from(member)
.leftJoin(team).on(member.username.eq(team.name))
.fetch();
for (Tuple tuple : result) {
System.out.println("t=" + tuple);
}
}
๐ ํจ์น ์กฐ์ธ
: SQL์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ์๋๋ค.
: SQL์กฐ์ธ์ ํ์ฉํด์ ์ฐ๊ด๋ ์ํฐํฐ๋ฅผ SQL ํ๋ฒ์ ์กฐํํ๋ ๊ธฐ๋ฅ์ด๋ค. ์ฃผ๋ก ์ฑ๋ฅ ์ต์ ํ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.
: ํ์ฌ ์์์์๋ member๋ฅผ ์กฐํํ ๋ member์ ์ฐ๊ด๋ team์ ๋ชจ๋ ๋ค ๋๊ณ ์จ๋ค.
Member findMember = queryFactory
.selectFrom(member)
.where(member.username.eq("member1"))
.fetchOne();
'JPA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Querydsl] ํํ์ด๋ DTO๋ก ๊ฒฐ๊ณผ ๋ฐํํ๊ธฐ (0) | 2021.08.05 |
---|---|
[Querydsl] ์๋ธ์ฟผ๋ฆฌ (0) | 2021.08.04 |
[Querydsl] ์ ๋ ฌ, ํ์ด์ง, ์ง๊ณ ํจ์, ๊ทธ๋ฃน ํจ์ (0) | 2021.08.04 |
[Querydsl] where ์กฐ๊ฑด๊ณผ ๊ฒฐ๊ณผ ์กฐํ (0) | 2021.08.04 |
Querydsl์ด๋? (0) | 2021.08.04 |