서브 쿼리
- 개념 설명
- SQL과 유사하게 사용되지만 제약이 있긴함.
- JPQL 서브 쿼리는
Where
Having
절에서는 사용할 수 있지만,Select
나From
절에서는 사용할 수 없다.
서브 쿼리 예시
- 나이가 평균 이상인 회원
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
서브 쿼리 함수 등등.
- EXISTS
- 서브 쿼리에 결과가 존재하면 참을 반환
select m from Member m where exists (select t from m.team t where t.name = '팀A')
- 서브 쿼리에 결과가 존재하면 참을 반환
- ALL , ANY , SOME
- 비교 연산자와 함께 사용됨.
ALL
- 모든 조건을 만족시키면 참이다.
ANY
||SOME
- 조건 중 하나라도 만족하면 참이다.
- 비교 연산자와 함께 사용됨.
IN
- 서브 쿼리의 결과 중 하나라도 일치하면 참
예시
- 모든 상품의 재고보다 많은 주문을 찾기
select o from Order o where o.orderAmount > ALL (select p.stockAmount from Product p)
- 어떤 팀에라도 속한 회원을 찾기
select m from Member m where m.team = ANY (select t from Team t)
- 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
'자바 > JPA' 카테고리의 다른 글
[JPA 궁금증] 왜 컬렉션 타입으로 Set 을 사용하지 않고 List 를 사용하는 것인가? (0) | 2023.11.15 |
---|---|
[JPA] 스칼라 타입 (0) | 2023.11.12 |
[JPA] 조건식 (0) | 2023.11.10 |
[JPA] 값 타입과 불변 객체 (0) | 2023.11.10 |
[JPA] 값 타입 컬렉션 (0) | 2023.11.09 |