조건식

기본 조건식

select case
           when m.age <= 10 then '학생요금'
           when m.age >= 60 then '경로요금'
           else '일반요금'
           end
from Member m
  • 쿼리에 조건을 넣을 수 있다.

public class JpaMain {

    public static void main(String[] args) {

        Member member = new Member();
        member.setName("member");
        em.persist(member);

        em.flush();
        em.clear();

        String query = "select\n"
                + "case when m.age <= 10 then '학생요금' when m.age >= 60 then '경로요금'\n"
                + "else '일반요금'\n"
                + "end\n"
                + "from Member m";

        List<String> result = em.createQuery(query, String.class).getResultList();

        for (String s : result) {
            System.out.println("s = " + s);
        }

        tx.commit();
    }
}

단순 조건식

select case t.name
           when '팀A' then '인센티브110%'
           when '팀B' then '인센티브120%'
           else '인센티브105%'
           end
from Team t
  • 정확하게 매칭해서 쿼리를 뽑아내는 단순한 식이다.

COALESCE

select coalesce(m.username, '이름 없는 회원')
from Member m
  • 사용자 이름이 없으면 이름 없는 회원이란 문자를 출력한다.

  • 하나씩 조회해서 null이 아니면 그 값을 반환한다.

public class JpaMain {

    public static void main(String[] args) {

        Member member = new Member();
        // 이름을 세팅한다.
        member.setName("member");
        em.persist(member);

        em.flush();
        em.clear();

        String query = "select coalesce(m.name, '이름 없는 회원')\n"
                + "from Member m";

        List<String> result = em.createQuery(query, String.class).getResultList();

        // 이름이 있으니 해당 이름이 잘 나온다.
        for (String s : result) {
            System.out.println("s = " + s);
        }

        tx.commit();
    }
}
public class JpaMain {

    public static void main(String[] args) {

        Member member = new Member();
        em.persist(member);

        em.flush();
        em.clear();

        String query = "select coalesce(m.name, '이름 없는 회원')\n"
                + "from Member m";

        List<String> result = em.createQuery(query, String.class).getResultList();

        // 이름을 세팅하지 않았으니 '이름 없는 회원'으로 출력된다.
        for (String s : result) {
            System.out.println("s = " + s);
        }

        tx.commit();
    }
}
  • setName()을 해주지 않으면 이름 없는 회원으로 출력된다.

NULLIF

select NULLIF(m.username, '관리자')
from Member m
  • m.username관리자가 같으면 null을 반환한다.

  • 다르면 첫 번째 값 m.username을 반환한다.

public class JpaMain {

    public static void main(String[] args) {

        Member member = new Member();
        // m.username과 관리자가 같은 값이므로
        member.setName("관리자");
        em.persist(member);

        em.flush();
        em.clear();

        String query = "select NULLIF(m.name, '관리자')\n"
                + "from Member m";

        List<String> result = em.createQuery(query, String.class).getResultList();

        // null을 반환한다.
        for (String s : result) {
            System.out.println("s = " + s);
        }

        tx.commit();
    }
}
  • setName("관리자")를 하면 두 값이 같으므로 null을 반환한다.

  • 관리자의 이름을 숨겨야할 때 사용할 수 있다.

  • 다르면 m.name을 반환한다.

Last updated