JVM/JPA

JPQL 조건식

kyoulho 2023. 6. 28. 17:50

타입 표현

종류 설명 예제
문자 작은 따옴표 사이에 표현
작은 따옴표를 표현하고 싶으면 작은 따옴표 연속 두 개 사용
'HELLO'
'She''s'
숫자 L(Long 타입 지정)
D(Double 타입 지정)
F(Float 타입 지정)
10L
10D
10F
날짜 DATE {d 'yyy-mm-dd'}
TIME {t 'hh-mm-ss'}
DATETIME {ts 'yyyy-mm-dd hh:mm:ss,f'}
{d '2012-03-24'}
{t '10-11-11'}
{ts '2012-03-24 10-11-11.123'}
m.createDate = {d '2012-03-24'}
Boolean TRUE, FALSE  
Enum 패키지명을 포함한 전체 이름을 사용 jpabook.MemberType.Admin
엔티티 타입 엔티티의 타입을 표현한다. 주로 상속과 관련해서 사용한다. TYPE(m) = Member

 

연산자 우선 순위

  1. 경로 탐색 연산(.)
  2. 수학 연산: +, -. *, / ...
  3. 비교 연산: =, >, >= ... , BETWEEN, LIKE, IN ...
  4. 논리 연산: NOT, AND, OR

 

Between. IN, LIKE, NULL 비교

BETWEEN
SELECT m FROM Member m
WHERE m.age BETWEEN 10 AND 20

IN
SELECT m FROM Member m
WHERE m.username IN ('회원1', '회원2')

LIKE
SELECT m FROM Member m
WHERE m.username LIKE '%원%'

_(언더라인): 한글자는 아무 값이 입력되어도 되지만 값이 있어야 한다.
SELECT m FROM Member m
WHERE m.username LIKE '회원_'

NULL
SELECT m FROM Member m
WHERE m.username IS NULL

 

컬렉션 식

컬렉션에만 사용하는 특별한 기능이다.

컬렉션은 컬렉션 식 이외에 다른 식은 사용할 수 없다.

 

빈 컬렉션 비교 식

주문이 하나라도 있는 회원 조회
SELECT m FROM Member m
WHERE m.orders IS NOT EMPTY

실행된 SQL
SELECT m.* FROM Member m
WHERE
   EXISTS (
    	SELECT i.id
        FROM Orders o
        WHERE m.id = o.member_id
    )

 

컬렉션의 멤버 식

엔티티나 값이 컬렉션에 포함되어 있으면 참
SELECT t FROM t
WHERE :memberParam MEMBER OF t.members

 

문자 함수

함수 설명 예제
CONCAT(문자1, 문자2, ...) 문자를 합한다. CONCAT('A','B') = AB
SUBSTRING(문자, 위치, [길이]) 위치부터 길이만큼 문자를 구한다. SUBSTRING('ABCEDF', 2, 3) = BCD
TRIM([[LEADIG | TRAILING | BOTH] [ 트림 문자]FROM] 문자) 공백 제거 TRIM(' ABC ') = 'ABC'
LOWER(문자) 소문자로 변경  
UPPER(문자) 대문자로 변경  
LENGTH(문자) 문자 길이를 구한다. LENGTH('ABC') = 3
LOCATE(찾을 문자, 원본 문자, [검색시작위치]) 검색위치 부터 문자를 검색, 못 찾으면 0을 반환 LOCATE('DE', 'ABCDEFG') = 4

 

수학 함수

함수 설명 예제
ABS(수학식) 절대값을 구한다. ABS( -10) = 10
SQRT(수학식) 제곱근을 구한다. SQRT(4) = 2.0
MOD(수학식, 나눌 수) 나머지를 구한다. MOD(4,3) = 1
SIZE(컬렉션 값 연관 경로식) 컬렉션의 크기를 구한다. SIZE(t.members)
INDEX(별칭) LIST 타입 컬렉션의 위치값을 구한다.
단 컬렉션이 @OrderColumn을 사용하는 LIST 타입일 때만 사용할 수 있다.
t.members m WHERE INDEX(m) > 3

 

날짜 함수

종료된 이벤트 조회
SELECT e FROM Event e WHERE E.endDate < CURRENT_DATE

현재 년, 월, 일 조회
SELECT YEAR(CURRNET_TIMESTAMP), MONTH(CURRENT_TIMESTAMP), DAY(CURRENT_TIMESTAMP)
FROM Member

 

COALESCE

m.username 이 null 이면 '이름 없는 회원'을 반환하라
SELECT COALESCE(m.username, '이름 없는 회원') FROM Member m

 

NULLIF

사용자 이름이 '관리자'면 null을 반환하고 나머지는 본인의 이름을 반환하라
SELECT NULLIF(m.username, '관리자') FROM Member m

 

728x90

'JVM > JPA' 카테고리의 다른 글

QueryDSL  (0) 2023.06.28
JPQL 다형성 쿼리, 사용자 정의 함수, Named 쿼리  (0) 2023.06.28
JPQL 서브쿼리  (0) 2023.06.26
JPQL 조인과 페치조인  (0) 2023.06.25
JPQL 기초  (0) 2023.06.25