> For the complete documentation index, see [llms.txt](https://heunnajo.gitbook.io/jpa-basic/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://heunnajo.gitbook.io/jpa-basic/10.-1/case.md).

# 조건식(CASE 등등)

JPQL 작성 시 주의해야할 점!

String으로 작성하는 것이기 때문에 컴파일 오류로 잡아낼 수 없다! 그러므로 오타나 띄어쓰기에 매우 주의해야한다!

아래 코드가 정답코드인데,  마지막 String query에서 "from Member m " 쿼리는 공백문자를 포함한다! 공백문자가 나온다음에 "로 닫아주어야 한다!

```java
String query = "select nullif(m.username, '관리자') as username " + "from Member m ";
```

자바의 switch-case와 비슷

1. 기본 CASE 식 : 조건 넣을 수 있음.

   ```sql
   select
          case when m.age <= 10 then '학생요금'
            when m.age >= 60 then '경로요금'
            else '일반요금'
       end
   from Member m
   ```
2. 단순 CASE 식 : Exact Matching. 정확하게 매칭되야 함.

   ```sql
   select
          case t.name
           when '팀A' then '인센티브110%'
           when '팀B' then '인센티브120%'
           else '인센티브105%'
          end
   from Team t
   ```

![조건 CASE식](https://1863485745-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MeTGDBevaFvc3bwqqht%2F-MejJEiMSwx3jtQV4A2O%2F-MejJOzqcxtaoXpJYDli%2F%E1%84%8C%E1%85%A9%E1%84%80%E1%85%A5%E1%86%AB%20CASE%E1%84%89%E1%85%B5%E1%86%A8.png?alt=media\&token=d97591cc-950b-4ede-854d-8aaeade6de01)

아래 함수들은 JPA에서 제공하는 표준 함수들이므로 어떤 DB들 간에 다 적용 가능하다.

* **COALESCE**: 하나씩 조회해서 **null이 아니면 반환**
* **NULLIF** : 두 값이 같으면 null 반환, 다르면 첫번째 값 반환

![CASE\_COALESCE](https://1863485745-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MeTGDBevaFvc3bwqqht%2F-MejJV4VRgCcIenqTpFQ%2F-MejJjS-hv0K1hGTTlIS%2FCASE_COALESCE.png?alt=media\&token=c139752b-d402-4821-bc6a-b90ac6f54300)

![CASE\_NULLIF](https://1863485745-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MeTGDBevaFvc3bwqqht%2F-MejJEiMSwx3jtQV4A2O%2F-MejJHiYW5JXPl_9kfz8%2FCASE_nullif.png?alt=media\&token=2f2cff98-ffbc-4973-a00a-086784df9878)
