서브쿼리

PPakSSam·2022년 1월 20일
0
post-thumbnail

서브쿼리 기본 예제

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

서브쿼리 지원 함수

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

  2. ALL (subquery) : 조건을 모두 만족하면 참

  3. ANY, SOME (subquery) : 조건을 하나라도 만족하면 참

  4. [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에서 불가능하다
  • 이 경우 조인으로 풀 수 있으면 풀어서 해결하고 아니면 SQL을 2번 사용하는 방식을 취한다.
profile
성장에 대한 경험을 공유하고픈 자발적 경험주의자

0개의 댓글