JPQL[서브쿼리]
JPQL 서브쿼리
서브쿼리는 JPQL 쿼리안에 다른 JPQL 쿼리가 포함한 것을 의미합니다.
이를 통해 복잡합 쿼리를 단순화하거나 특정 조건에 따라 데이터를 필터링 할 수 있습니다.
서브쿼리 예시
SELECT e
FROM Employee e
WHERE e.salary > (SELECT AVG(e2.salary) FROM Employee e2 WHERE e2.department = e.department)
위의 서브쿼리는 같은 부서에 속하는 직원들의 평군 급여를 계산하는 WHERE 절이 해당됩니다.
서브쿼리는 WHERE절 말고도 여러 종류가 존재합니다.
- [NOT] EXISTS (subquery)
- 서브 쿼리의 결과가 존재하면 참입니다.
- [NOT] IN ( subquery )
- 서브 쿼리의 결과중 하나라도 같은 것이 있으면 참 입니다.
서브쿼리의 한계
- JPA는 WHERE, HAVING 절에서만 서브 쿼리를 사용 할 수 있습니다.
- SELECT 절도 가능합니다.
- 하지만, FROM 절의 서브쿼리는 불가능합니다.
JPQL 기본 함수
- CONCAT
- 문자열을 연결하여 하나의 문자열로 만듭니다.
- SUBSTRING
- 문자열의 일부분을 반환합니다.
- TRIM
- 문자열의 앞뒤에 있는 공백을 제거합니다.
- LOWER, UPPER
- 문자열을 각각 소문자 또는 대문자로 변환합니다.
- LENGTH
- 문자열의 길이를 반환합니다.
- LOCATE
- 하나의 문자열이 다른 문자열 내에서 처음으로 등장하는 위치를 반환합니다.
- ABS
- 절댓값을 반환합니다.
- SQRT
- 제곱근을 반환합니다.
- MOD
- 나머지를 반환합니다.
- SIZE
- 컬렉션의 크기를 반환합니다. (주로 JPQL에서 사용됨)
- INDEX
- 컬렉션의 인덱스를 반환합니다. (주로 JPQL에서 사용됨)
This post is licensed under CC BY 4.0 by the author.