서브 쿼리
일반적인 SQL 서브쿼리. 상위 쿼리의 Member m은 하위 where절에 없다! m2라고 새로 정의한 것을 사용하고 있다! =>메인 쿼리와 서브쿼리가 관계가 없다! 보통 이런 식으로 서브 쿼리를 작성해야 성능이 잘 나온다!
나이가 평균보다 많은 회원
한건이라도주문한고객
서브 쿼리 지원 함수
[NOT] EXISTS (subquery): 서브쿼리에 결과가 존재하면 참 {ALL | ANY | SOME} (subquery)
ALL 모두 만족하면 참
ANY, SOME: 같은 의미, 조건을 하나라도 만족하면 참
[NOT] IN (subquery): 서브쿼리의 결과 중 하나라도 같은 것이 있으면 참
JPA 서브 쿼리 한계
JPA는 WHERE, HAVING 절에서만 서브 쿼리 사용 가능
SELECT 절도 가능(하이버네이트에서 지원)
FROM 절의 서브 쿼리는 현재 JPQL에서 불가능 =>조인으로 풀 수 있으면 풀어서 해결 그래도 안된다면 보통 from 절의 서브쿼리는 그 안에서 결과가 다 필터링이 된다. 애플리케이션에서 조작 및 처리하는 식으로 한다고 함. 또는 쿼리를 분해해서 날린다. 본 쿼리 결과 + 서브 쿼리 결과를 조합해서 애플리케이션에서 조합하는 형식으로 처리하기도 함. =>이 또한 서브쿼리에서 넘기는 데이터가 크다면 불가능. 통계성 쿼리라면 네이티브로 작성. 하지만 이러한 경우에도 네이티브 쓰지 않는다고 함!
그 이유는,
다 그런 건 아니지만 from 절의 서브 쿼리로 데이터를 여러 개 가져온 다음 안에서는 데이터를 줄이는 일만 하고 데이터 밖에서는 데이터 타입을 변경하거나 SQL에서 로직이 있는 경우(Vue에 대한 로직/Vue가 원하는 형식으로 데이터 변환 등) =>JPA를 쓴다면 이러한 작업들은 애플리케이션에서 한다! 그러면 from 절의 서브쿼리가 줄어들기도 한다!
Last updated