뭉
노재능 록리형 개발자
뭉
전체 방문자
오늘
어제
  • 분류 전체보기 (27)
    • Java (18)
      • Grammer (14)
      • Problem Solving (4)
    • JavaScript (0)
      • Grammer (0)
      • jQuery (0)
    • Spring (0)
    • DB (9)
      • SQL (6)
      • JPA (3)
    • Storage (0)
    • ETC (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
뭉

노재능 록리형 개발자

CASE WHEN과 IIF
DB/SQL

CASE WHEN과 IIF

2022. 2. 27. 04:47

DB 중심 아키텍쳐 환경에서 조건에 따라 분기를 주기 위해선 CASE WHEN 사용이 필수적입니다.

사실 DB 중심 아키텍쳐하면 할 말이 많습니다만...이번 주제가 아니니 넘어가기로 하고 쿼리문에서 조건에 따른 분기문을 어떻게 주는지 살펴봅시다.

 

문법은 다음과 같습니다.

-- SELECT절
SELECT CASE 
    WHEN {조건문} THEN {리턴값}
    WHEN {조건문} THEN {리턴값}
    ...
    ELSE {리턴값} END AS {별칭}
FROM TABLE

-- ORDER BY절
SELECT * FROM TABLE
ORDER BY CASE
    WHEN {조건문} THEN {순서값}
    WHEN {조건문} THEN {순서값}
    ...
    ELSE {순서값} END

ORDER BY절도 적었지만 오름차순과 내림차순을 설정할 수 없고 특정한 상황에서만 쓰이기에 자주 사용되지는 않습니다. 공식 문서에는 ASC/DESC 예제가 있지만 어떤 문제 때문인지 구현이 되질 않더라구요.

사실상 가장 많이 사용되는 것은 SELECT절입니다.

 

실사용 예제를 보겠습니다.

-- SELECT절
SELECT CASE 
    WHEN AMOUNT > 1 THEN 'SALE'
    WHEN AMOUNT = 0 THEN 'ORDER'
    ELSE 'ERROR' END AS STATUS
FROM BOOK		-- 책 재고가 1 이상이면 판매, 0이면 주문, 나머지는 에러 출력

-- ORDER BY절
SELECT * FROM EVENT
ORDER BY PLAN
    WHEN TYPE = 'ING' THEN 1
    WHEN TYPE = 'END' THEN 2
    ELSE 3 END	-- 진행 중인 계흭, 그 다음 끝난 계흭, 나머지 계흭 순으로 출력

위에서 보다시피 CASE 문은 그 길이가 매우 길어 가독성을 떨어뜨리는 주범입니다.

 

이지선다일 때는 IFF 문법을 사용할 수 있는데 CASE WHEN과 비교하면 매우 가독성이 좋은 편입니다. 상황이 된다면 IFF을 사용하길 권장합니다.

-- 문법
SELECT 
	IIF( {조건문}, {조건에 해당하는 리턴값}, {조건에 해당하지 않는 리턴값}) AS {별칭}
FROM TABLE

-- 실사용 예제
SELECT IIF(SEX_CODE = 1, '남자', '여자') FROM USER	--성별코드가 1이면 남자, 그 외엔 여자 출력

 

'DB > SQL' 카테고리의 다른 글

CTE  (0) 2022.03.12
PIVOT~FOR  (0) 2022.03.01
STRING_AGG와 STUFF~FOR XML PATH  (0) 2022.02.27
EXISTS  (0) 2022.02.27
ISNULL  (0) 2022.02.27
    'DB/SQL' 카테고리의 다른 글
    • PIVOT~FOR
    • STRING_AGG와 STUFF~FOR XML PATH
    • EXISTS
    • ISNULL
    뭉
    뭉
    노재능 록리형 개발자

    티스토리툴바