1. 타입 표현
- JPQL에서 사용하는 타입은 대소문자를 구분하지 않는다.
종류 | 설명 | 예제 |
문자 | 작은 따옴표 사이에 표현 작은 따옴표를 표현하고 싶으면 작은 따옴표 연속 두 개('') 사용 |
'HELLO' "She''s ' |
숫자 | L(Long 타입 지정) D(Double 타입 지정) F(Float 타입 지정) |
10L 10D 10F |
날짜 | DATE {d 'yyyy-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 |
2. 연산자 우선순위
(1) 경로 탐색 연산
- ( . )
(2) 수학 연산
- +, -(단항 연산자), *, /, +, -
(3) 비교 연산
- =, >, >=, <, <=, <>(다름)
- [NOT] BETWEEN, [NOT] LIKE, [NOT] IN, IS [NOT] NULL, IS [NOT] EMPTY, [NOT] MEMBER [OF], [NOT] EXISTS
(4) 논리 연산
- NOT, AND, OR
3. 논리 연산과 비교식
(1) 논리 연산
- AND : 둘 다 만족하면 참
- OR : 둘 중 하나만 만족해도 참
- NOT : 조건식의 결과 반대
(2) 비교식
- = | > | >= | < | <= | <>
4. 연산자
(1) Between
- 문법 : x [NOT] BETWEEN A AND B
- 설명 : X는 A~B 사이의 값이면 참 (A, B 값 포함)
select m from Member m where m.age between 10 and 20
(2) IN
- 문법 : X [NOT] IN Y
- 설명 : X와 같은 값이 Y에 하나라도 있으면 참이다. IN 식의 예제에는 서브 쿼리를 사용할 수 있다.
select m from Member m where m.username in ('member1', 'member2')
(3) LIKE
- 문법 : 문자 표현식 [NOT] LIKE 패턴 값 [ESCAPE 이스케이프 문자]
- 설명 : 문자 표현식과 패턴 값을 비교한다.
- 패턴
- % : 아무 값들이 입력되어도 된다. (값이 없어도 된다.)
- _ : 한 글자는 아무 값이 입력되어도 되지만 값이 있어야 한다.
// (1) (좋은회원, 회원, 원)
select m from Member m where m.username like '%원%'
// (2) (회원1, 회원ABC)
select m from Member m where m.username like '회원%'
// (3) (좋은 회원, A회원)
select m from Member m where m.username like '%회원'
// (4) (회원A, 회원1)
select m from Member m where m.username like '회원_'
// (5) (회원3)
select m from Member m where m.username like '__3'
// (6) (회원%)
select m from Member m where m.username like '회원\%' ESCAPE '\'
(4) NULL 비교
- 문법 : {단일 값 경로 | 입력 파라미터 } IS [NOT] NULL
- 설명 : NULL 인지 비교한다. NULL은 =비교하면 안 되고 꼭 IS NULL을 사용해야 한다.
select m from Member m where m.username is null
select m from Member m where m.username = null // 불가능
(5) 빈 컬렉션 비교 식
- 문법 : {컬렉션 값 연관 경로} IS [NOT] EMPTY
- 설명 : 컬렉션에 값이 비었으면 참
select m from Member m where m.orders is not empty
(6) 컬렉션의 멤버 식
- 문법 : {엔티티 or 값} [NOT] MEMBER [OF] { 컬렉션 값 연관 경로 }
- 설명 : 엔티티나 값이 컬렉션에 포함되어 있으면 참
select t from Team t where :memberParam member of t.members
(5), (6) 컬렉션 식은 컬렉션에만 사용하는 특별한 기능이다.
또한 컬렉션은 컬렉션 식 이외에 다른 식은 사용할 수 없다.
5. 스칼라 식
- 스칼라는 숫자, 문자, 날짜, case, 엔티티(엔티티의 타입 정보) 같은 가장 기본적인 타입들을 말한다.
(1) 수학 식
- +, - : 단항 연산자
- *, /, +, - : 사칙 연산
(2) 문자 함수
함수 | 설명 | 예제 |
CONCAT(문자1, 문자2, ....) | 문자를 합한다. | CONCAT('A', 'B') = AB |
SUBSTRING(문자, 위치, [길이]) | 위치부터 시작해 길이만큼 문자를 구한다. 길이 값이 없으면 나머지 전체 길이를 뜻한다. |
SUBSTRING('ABCDEF', 2, 3) = BCD |
TRIM([[LEADING | TRAILING | BOTH] [trim 문자] FROM] 문자) | LEADING : 왼쪽만 TRAILING : 오른쪽만 BOTH : 양쪽 다 트림 문자를 제거한다. 기본값은 BOTH. 트림 문자의 기본값은 공백(SPACE)이다. |
TRIM(' ABC ') = 'ABC' |
LOWER(문자) | 소문자로 변경 | LOWER('ABC') = 'abc' |
UPPER(문자) | 대문자로 변경 | UPPER('abc') = 'ABC' |
LENGTH(문자) | 문자 길이 | LENGTH('ABC') = 3 |
LOCATE(찾을 문자, 원본 문자, [검색시작위치]) | 검색위치부터 문자를 검색한다. 1부터 시작, 못 찾으면 0 반환 |
LOCATE('DE', 'ABCDEFG') = 4 |
(3) 수학 함수
함수 | 설명 | 예제 |
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 |
(4) 날짜 함수
- 데이터베이스의 현재 시간을 조회한다.
- CURRENT_DATE : 현재 날짜
- CURRENT_TIME : 현재 시간
- CURRENT_TIMESTAMP : 현재 날짜 시간
select CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP from Team t
//결과 2013-08-19, 23:38:17, 2013-08-19 23:38:17.736
select e from Event e where e.endDate < CURRENT_DATE
6. CASE
- 특정 조건에 따라 분기할 때 CASE 식을 사용한다.
(1) 기본 CASE
문법 :
CASE
{ WHEN <조건식> THEN <스칼라식> } +
ELSE <스칼라식>
END
예시 :
select
case when m.age <= 10 then '학생요금'
when m.age >= 60 then '경로요금'
end
from Member m
(2) 심플 CASE
- 조건식을 사용하지 않는다.
문법 :
CASE <조건대상>
{WHEN <스칼라식1> THEN <스칼라식2>} +
ELSE <스칼라식>
END
예시 :
select
case t.name
when '팀A' then '인센티브110%'
when '팀B' then '인센티브120%'
else '인센티브105%'
end
from Team t
(3) COALESCE
- 문법 : COALESCE (<스칼라식> {,<스칼라식>}+)
- 설명 : 스칼라식을 차례대로 조회해서 null이 아니면 반환한다.
select coalesce(m.username, '이름 없는 회원') from Member m
//사용자 이름이 없으면 '이름 없는 회원' 반환
(4) NULLIF
- 문법 : NULLIF(<스칼라식>, <스칼라식>)
- 설명 : 두 값이 같으면 null을 반환하고 다르면 첫 번째 값을 반환한다. 집합 함수는 null을 포함하지 않으므로 보통 집합 함수와 함께 사용한다.
select NULLIF(m.username, '관리자') from Member m
//사용자 이름이 '관리자'면 null을 반환하고 나머지는 본인의 이름을 반환
반응형
'JPA > JPA' 카테고리의 다른 글
[JPA] JPQL - 벌크 연산 (0) | 2022.01.08 |
---|---|
[JPA] JPQL - Named 쿼리 (정적 쿼리) (0) | 2022.01.08 |
[JPA] JPQL - 경로 표현식(Path Expression)과 묵시적 조인 (0) | 2022.01.07 |
[JPA] JPQL - 페치 조인(Fetch Join) (0) | 2022.01.07 |
[JPA] JPQL - 조인(Join) (0) | 2022.01.07 |
댓글