[JPA] 서브 쿼리 ( Subqueries )

서브 쿼리

  • 개념 설명
    • SQL과 유사하게 사용되지만 제약이 있긴함.
    • JPQL 서브 쿼리는 Where Having 절에서는 사용할 수 있지만, SelectFrom 절에서는 사용할 수 없다.

서브 쿼리 예시

  • 나이가 평균 이상인 회원
    select m from Member m
    where m.age > (select avg(m2.age) from Member m2)
  • 주문을 한 번 이라도 한 고객
    select m from Member m
    where (select count(o) from Order o where m = o.member) > 0

서브 쿼리 함수 등등.

  1. EXISTS
    1. 서브 쿼리에 결과가 존재하면 참을 반환
      select m from Member m
      where exists (select t from m.team t where t.name = '팀A')
  1. ALL , ANY , SOME
    1. 비교 연산자와 함께 사용됨.
      1. ALL
        1. 모든 조건을 만족시키면 참이다.
      1. ANY || SOME
        1. 조건 중 하나라도 만족하면 참이다.
  1. IN
    1. 서브 쿼리의 결과 중 하나라도 일치하면 참

예시

  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)
  1. 20세 이상의 멤버를 가진 팀 찾기
    select t from Team t
    where t IN (select t2 from Team t2 join t2.members m2 where m2.age >= 20)


Uploaded by N2T