[JPA 기본 - JPQL] 서브 쿼리

강신현·2022년 7월 27일
0

서브 쿼리

SELECT 문 안에 다시 SELECT 문이 기술된 형태의 쿼리(query)

예시

  1. 나이가 평균보다 많은 회원
select m from Member m where m.age > (select avg(m2.age) from Member m2)
  1. 한 건이라도 주문한 고객
select m from Member m where (select count(o) from Order o where m = o.member) > 0

지원 함수

1. EXISTS {ALL | ANY | SOME}

서브쿼리에 결과가 존재하면 참

  • ALL : 모두 만족하면 참
  • ANY, SOME: 같은 의미, 조건을 하나라도 만족하면 참

예시

  1. 팀A 소속인 회원
select m from Member m where exists (select t from m.team t where t.name = ‘팀A')
  1. 전체 상품 각각의 재고보다 주문량이 많은 주문들
select o from Order o where o.orderAmount > ALL (select p.stockAmount from Product p)
  1. 어떤 팀이든 팀에 소속된 회원
select m from Member m where m.team = ANY (select t from Team t)

2. IN

서브쿼리의 결과 중 하나라도 같은 것이 있으면 참


한계

FROM 절의 서브 쿼리는 현재 JPQL에서 불가능 👉 조인으로 풀어서 해결

profile
땅콩의 모험 (server)

0개의 댓글