10. 객체지향 쿼리 언어 - 기본 문법 (서브 쿼리)

HotFried·2023년 10월 4일
0

서브쿼리

  • 쿼리 안에 들어가는 쿼리를 서브쿼리라고 한다.

나이가 평균보다 많은 회원

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 

서브 쿼리 지원 함수

[NOT] EXISTS (subquery)

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

팀A 소속인 회원

select m from Member m
where exists (select t from m.team t where t.name = ‘팀A')

ALL (subquery)

  • ALL : 모두 만족하면 참

전체 상품 각각의 재고보다 주문량이 많은 주문들

select o from Order o 
where o.orderAmount > ALL (select p.stockAmount from Product p) 

ANY, SOME (subquery)

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

어떤 팀이든 팀에 소속된 회원

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

[NOT] IN (subquery)

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

JPA 서브쿼리의 한계

  • JPA는 WHERE, HAVING 절에서만 서브쿼리 사용 가능
  • SELECT 절도 가능하다 (하이버네이트에서 지원)
select (select avg(m1.age) From Member m1) as avgAge 
from Member m join Team t on m.username=t.name
  • 하이버네이트6 부터는 FROM 절의 서브쿼리를 지원한다.

참고 :

김영한. 『자바 ORM 표준 JPA 프로그래밍』. 에이콘, 2015.

자바 ORM 표준 JPA 프로그래밍 - 기본편

profile
꾸준하게

0개의 댓글