• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

inner join 인 경우 join 문이 없어도 되는 경우

23.10.15 05:46 작성 조회수 274

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)


2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)


3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
queryDsl 강의 중 조인편을 보면서 한가지 실험을 해봤습니다.

@Test
void 팀A에_소속된_모든_멤버를_조회힌다() {
    List<Member> found = jpaQueryFactory.selectFrom(member)
            .where(member.team.name.eq("teamA"))
            .fetch();

    assertThat(found)
            .map(Member::getTeam)
            .extracting("name")
            .allMatch(teamName -> teamName.equals("teamA"));
}

@Test
void 조인을_통해_팀A에_소속된_모든_멤버를_조회힌다() {
    List<Member> found = jpaQueryFactory.selectFrom(member)
            .join(member.team, team)
            .where(team.name.eq("teamA"))
            .fetch();

    assertThat(found)
            .map(Member::getTeam)
            .extracting("name")
            .allMatch(teamName -> teamName.equals("teamA"));
}

첫번째 테스트는 join 문 없이 QType 을 활용해서

where에 필요한 조건을 작성하였구요

두번째 테스트는 join 메서드를 활용한 것 입니다.

테스트 결과도 같고 실행 후 실제 수행된 쿼리도 동일하더라구요

이런 경우에는 어떤 방법이 더 적절할까요?

 

답변 2

·

답변을 작성해보세요.

0

안녕하세요. 송우석님

JPA 기본편 강의에 명시적 조인, 묵시적 조인을 참고해주세요 :)

https://www.inflearn.com/course/lecture?courseSlug=ORM-JPA-Basic&unitId=21727

 

감사합니다.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.10.17

안녕하세요, 인프런 AI 인턴이에요.

inner join의 경우 join 문이 없어도 되는 경우에 대해 설명해드릴게요.

inner join은 특정한 조건을 만족하는 두 개 이상의 테이블을 조인할 때 사용하는 방법입니다. 항상 join 문을 작성해야 하는 것은 아니며, 일부 경우에는 join 문이 없어도 되는 경우가 있습니다.

예를 들어, 특정 테이블에서 조건을 충족하는 데이터를 조회할 때, 해당 테이블과 다른 테이블 사이에 어떠한 관계도 없는 경우 join 문을 작성할 필요가 없습니다.

따라서, 팀A에 소속된 모든 멤버를 조회하는 경우, member 테이블과 team 테이블이 관계를 가지고 있지 않으므로 join 문을 작성할 필요가 없습니다. 대신에, member 테이블에서 team 이름이 “teamA”인 데이터를 조회하는 조건문으로 간단히 작성할 수 있습니다.

예시 코드에서는 queryDsl을 사용하여 member 테이블에서 team 이름이 “teamA”인 데이터를 조회하고 있습니다. 이렇게 조회한 데이터에서는 모든 멤버가 “teamA”에 속한 것이 보장되므로, 해당 조건을 테스트할 수 있습니다.

이와 같이, inner join은 테이블 간의 관계에 따라 사용하는 것이 일반적이지만, 관계를 가지고 있지 않은 경우에는 join 문을 작성할 필요가 없습니다.

더 자세한 내용이나 다른 질문이 있으시면 언제든지 답변해드릴게요. 좋은 학습되시길 바랄게요!