오봉이와 함께하는 개발 블로그

JPA - JPQL 타입 표현과 기타식, 조건식 본문

BE/JPA

JPA - JPQL 타입 표현과 기타식, 조건식

오봉봉이 2022. 6. 30. 17:15
728x90

JPQL 타입 표현

  • 문자 : 'HELLO', 'She''s'
    • 작은 따옴표 하나더 표현하려면 '' 두 개 연달아서 사용
    • "SELECT m.username, 'HELLO', true FROM Member m"
  • 숫자 : 10L(Long), 10D(Double), 10F(Float)
  • Boolean : TRUE, FALSE
    • "SELECT m.username, 'HELLO', TRUE FROM Member m"
  • ENUM : jpabook.MemberType.Admin (패키지명 포함)
    • "SELECT m.username, 'HELLO', true FROM Member m where m.type = jpql.MemberType.ADMIN"
    • 파라미터 바인딩 가능
      • "SELECT m.username, 'HELLO', true FROM Member m where m.type = :userType"
      • .setParameter("userType", MemberType.ADMIN)
  • 엔티티 타입 : TYPE(m) = Member (상속 관계에서 사용)
    • Item 엔티티 하위에 Book, Movie, Album 이라는 하위 엔티티가 있는 경우를 가정
    • em.createQuery("SELECT i FROM Item i WHERE TYPE(i) = Book", Item.Class)

JPQL 기타

  • SQL과 문법이 같은 식
  • EXISTS, IN
  • AND, OR, NOT
  • =, >, >=, <, <=, <>
  • BETWEEN, LIKE, IS NULL
    • "SELECT m.username, 'HELLO', true, FROM Member m WHERE m.username IS NOT NULL"
    • "SELECT m.username, 'HELLO', true, FROM Member m WHERE m.age BETWEEN 0 AND 10"

조건식

  • 기본 CASE 식
    • 범위에 대해 조건을 만들 수 있다.
select
  case when m.age <= 10 then '학생요금'
       when m.age >= 60 then '경로요금'
       else '일반요금'
  end
from Member m
  • 단순 CASE 식
    • 조건을 정확히 딱 맞게 구현할 수 있다.
select
  case t.name
    when '팀A' then '인센티브110%'
    when '팀B' then '인센티브120%'
    else '인센티브105%'
  end
from Team t
  • COALESCE : 하나씩 조회해서 null이 아니면 컬럼에 들어있는 값 반환
    • 사용자 이름이 없으면(null이면) 이름 없는 회원을 반환
      • select coalesce(m.username,'이름 없는 회원') from Member m
  • NULLIF : 두 값이 같으면 null 반환, 다르면 첫번째 값 반환
    • 사용자 이름이 '관리자'면 null을 반환하고 나머지는 본인의 이름을 반환
      • select NULLIF(m.username, '관리자') from Member m
출처 : 인프런 김영한 지식공유자님의 스프링 부트와 JPA 실무 완전 정복 로드맵 강의
728x90

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

JPA - 경로 표현식  (0) 2022.07.01
JPA - JPQL 함수  (0) 2022.06.30
JPA - 조인, 서브 쿼리  (0) 2022.06.30
JPA - 페이징  (0) 2022.06.30
JPA - 프로젝션(select)  (0) 2022.06.30
Comments