자바의 switch case 문과 비슷한데,
when이 case고
else가 default
마지막은 end로 조건식 끝이라는 걸 표현해 줘야 함.
em.createQuery("select " +
"case " +
"when m.age <= 10 then '학생요금'" +
"when m.age >= 60 then '경로요금'" +
"else '일반요금'" +
"end " +
"from Member m", Member.class)
.getResultList();
이런 식.
CASE ~ END까지 조건식.
if ~ else랑 비슷하다.
이게 기본 case 식 이고,
단순 case 식
em.createQuery("select " +
"case t.name " +
"when '팀A' then '인센티브110%'" +
"when '팀B' then '인센티브120%'" +
"else '인센티브105%'" +
"end " +
"from Team t", Member.class)
.getResultList();
뭔가 기본 case식은 if else 느낌이고,
단순 케이스 식은 실제 switch문 느낌.
Hibernate:
/* select
case t.name
when '팀A' then '인센티브110%'
when '팀B' then '인센티브120%'
else '인센티브105%'
end
from
Team t */ select
case t1_0.name
when '팀A' then '인센티브110%'
when '팀B' then '인센티브120%'
else '인센티브105%'
end
from
Team t1_0
나가는 쿼리.
case 다음에 참조할 값을 주면 단순 case 식, 이거는 실제 switch 문 처럼 쓰면 됨. case가 when, default가 else
case 다음 참조할 값을 안 주면, 그냥 if else 문 처럼 쓰면됨. when이 else if가 되고, else가 else.
마지막에 end 써야 하고.
그리고 case 식 중에 아예 간단한 건 함수로 제공함.
coalesce : 하나씩 조회해서 null이면 두번째 값을 반환. 아니면 값을 반환.
nullif : 두 값이 같으면 null 반환, 다르면 첫번째 값 반환.
위 둘이 대칭되는? 그런느낌.
select coalesce(m.username, '이름 없는 회원') from Member m
조회해서 null이면 '이름 없는 회원'을 반환. 아니면 그냥 그 값을 반환
List<String> result1 = em.createQuery("select coalesce(m.username, '이름없는 회원') from Member m", String.class)
.getResultList();
username이 null이면 이름없는 회원으로 가져옴.
Hibernate:
/* select
coalesce(m.username, '이름없는 회원')
from
Member m */ select
coalesce(m1_0.username,'이름없는 회원')
from
Member m1_0
select nullif(m.username, '관리자') from Member m
조회해서, 그 값이 '관리자'면 null을 반환. 아니면 그냥 그 값을 반환.
List<String> result1 = em.createQuery("select nullif(m.username, '관리자') from Member m", String.class)
.getResultList();
username이 '관리자'면 null로 가져옴.
Hibernate:
/* select
nullif(m.username, '관리자')
from
Member m */ select
nullif(m1_0.username,'관리자')
from
Member m1_0
이 두개 외에도 함수들이 몇개 있음.
JPA 표준이기에 DB종류 상관없이 가능.
'JPA > JPA 기본' 카테고리의 다른 글
46. 경로 표현식 (0) | 2023.11.01 |
---|---|
45. JPQL 함수 (0) | 2023.10.31 |
43. JPA 타입 표현과 기타식 (0) | 2023.10.31 |
42. 서브쿼리 (0) | 2023.10.31 |
41. 조인 (0) | 2023.10.31 |