본문 바로가기
JPA/JPQL

JPQL 서브쿼리

by 킹차니 2021. 7. 21.
김영한님의 인프런 강의와 PDF를 바탕으로 정리하였습니다.
https://www.inflearn.com/courses?s=%EA%B9%80%EC%98%81%ED%95%9C

 

서브 쿼리

예 1) 나이가 평균보다 많은 회원:

select m from Member m

where m.age > (select avg(m2.age) from Member m2)

 

예 2) 한 건이라도 주문한 고객

select m from Member m
where (select count(o) from Order o where m = o.member) > 0

 

 

 

 

서브 쿼리 지원 함수

 

[NOT] EXISTS (subquery): 서브쿼리에 결과가 존재하면 참

{ ALL | ANY | SOME } (subquery)

ALL 모두 만족하면 참

ANY, SOME: 같은 의미, 조건을 하나라도 만족하면 참
[NOT] IN (subquery): 서브쿼리의 결과 중 하나라도 같은 것이 있으면 참

 

예 1 ) A 소속인 회원
select m from Member m
where exists (select t from m.team t where t.name = ‘팀A')

 

예 2 ) 전체 상품 각각의 재고보다 주문량이 많은 주문들
select o from Order o
where o.orderAmount > ALL (select p.stockAmount from Product p)

 

예 3 ) 어떤 팀이든 팀에 소속된 회원

select m from Member m

where m.team = ANY (select t from Team t)

 

 

 

 

 

JPA 서브 쿼리 한계

JPA WHERE, HAVING 절에서만 서브 쿼리 사용 가능
SELECT 절도 가능(하이버네이트에서 지원)

FROM 절의 서브 쿼리는 현재 JPQL에서 불가능

조인으로 풀 수 있으면 풀어서 해결

 

 

 

 

 


참고자료: 김영한님 인프런 강의, 강의 PDF

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

JPQL 조건식(CASE 등)  (0) 2021.07.21
JPQL 타입표현과 기타식  (0) 2021.07.21
JPQL 페이징, 조인  (0) 2021.07.20
JPQL 프로젝션  (0) 2021.07.20
JPQL 기본문법과 기능  (0) 2021.07.19