Free Lines Arrow
본문 바로가기
DataBase/JPA

[JPA] JPQL 조인, 서브쿼리

by skahn1215 2021. 9. 24.
728x90
반응형

JPQL 조인

우리가 SQL 에서 조인을 사용하듯이 JPQL 에서도 조인을 사용할수 있다.

 

 

조인 개념

https://vprog1215.tistory.com/145?category=1012339 

 

[DB] Join

Join 이란? DB의 테이블을 만들때 효율성과, 가독성, 중복데이터를 피하기 위해 여러개의 Table을 만든다. Join을 이용하여 나눠진 테이블을 조합할수 있다. 준비사항 H2를 설치하여 다음과 같이 SQL

vprog1215.tistory.com

 

 

 

JPQL 조인의 종류

 

내부조인

SELECT m FROM Member m [INNER] JOIN m.team t

String innerJoinQuery = "select m from JPQLMember m join m.team t";
List<JPQLMember> innerJoinResult = em.createQuery(innerJoinQuery, JPQLMember.class)
        .getResultList();

 

 

외부조인

SELECT m FROM Member m LEFT [OUTER] JOIN m.team t

String leftJoinQuery = "select m from JPQLMember m left join m.team t";
List<JPQLMember> lefterJoinResult = em.createQuery(leftJoinQuery, JPQLMember.class)
        .getResultList();

 

 

세타조인

두개의 테이블을 모두 조회후 조건을 주어 필터링을 한다.

select count(m) from Member m, Team t where m.username = t.name

String thetaQuery = "select m from JPQLMember m, JPQLTeam t where m.username = t.name";
List<JPQLMember> thetaJoinResult = em.createQuery(thetaQuery, JPQLMember.class)
    .getResultList();

 

 

 

조인 ON 절

조인을 하기전 대상을 필터링한다.

Where 과 다른점은 ON 을 쓰면 먼저 ON 조건에 맞는 가상테이블을 만들어 수행한다.

 

String onJoinQuery1 = "select m from JPQLMember m left join m.team t on t.name = 'teamA'";
List<JPQLMember> onJoinResult1 = em.createQuery(onJoinQuery1, JPQLMember.class)
    .getResultList();

 

 

 

 

JPQL 서브쿼리

  • WHERE, HAVING 절에서만 서브쿼리가 가능하다.
  • 하지만 하이버네이트에서는 상관없다.
  • FROM 정의 서브쿼리는 현재 JPQL 에서 불가능하다.
    - Join 으로 풀거나 정 안되면 NativeSql을 써야한다.

 

String subQuery1 = "select m from JPQLMember m where m.age > (select avg(m2.age) from JPQLMember m2)";
List<JPQLMember> subQueryResult1 = em.createQuery(subQuery1, JPQLMember.class)
            .getResultList();

 

 

 

 

 

 

 

 

 

참고

https://www.inflearn.com/course/ORM-JPA-Basic/lecture/21722?tab=note 

 

자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 학습 페이지

지식을 나누면 반드시 나에게 돌아옵니다. 인프런을 통해 나의 지식에 가치를 부여하세요....

www.inflearn.com

 

 

 

 

 

 

 

 

 

728x90
반응형

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

[JPA] JPQL CASE  (0) 2021.09.25
[JPA] JPQL TYPE  (0) 2021.09.24
[JPA] JPQL 페이징  (0) 2021.09.24
[JPA] JPQL 프로젝션  (0) 2021.09.24
[JPA] JPQL 문법  (0) 2021.09.23

댓글