[SQL] CASE 문 (CASE WHEN THEN)

하파타카·2022년 5월 26일
0

SQL

목록 보기
5/26

CASE 문 (CASE WHEN THEN)

sql에서 여러조건 중 해당하는 조건의 값을 반환하는 문법.
if문swicth문 처럼 조건에 해당하는 값을 반환하는 문법임.

단, if문 swicth문과는 달리 반환하는 값이 하나로 고정되어있음.
조건에 따라 어떠한 작업을 수행할 수는 없다는 의미.

모든 조건이 충족하지 않았을때 반환할 else절의 값을 지정해두지 않으면 NULL(빈값)을 반환함.

작성기준은 MySQL이며, 4.0이상의 버전에서 사용가능.

사용

CASE case_value
    WHEN 조건1 THEN 결과1
    WHEN 조건2 THEN 결과2
    WHEN 조건3 THEN 결과3
    	...
    ELSE 위 조건을 모두 불만족시 나타날 결과값
END CASE
SELECT 
	CASE 10 
      WHEN 0 THEN '일요일'
      WHEN 1 THEN '월요일'
      WHEN 2 THEN '화요일'
      WHEN 3 THEN '수요일'
      WHEN 4 THEN '목요일'
      WHEN 5 THEN '금요일'
      WHEN 6 THEN '툐요일'
      ELSE '잘못된 값입니다'
   END;
// 결과: 잘못된 값입니다
// value:3 -> 결과: 수요일
SELECT 
	CASE 10 
      WHEN 0 THEN '일요일'
      WHEN 1 THEN '월요일'
      WHEN 2 THEN '화요일'
      WHEN 3 THEN '수요일'
      WHEN 4 THEN '목요일'
      WHEN 5 THEN '금요일'
      WHEN 6 THEN '툐요일'
   END;
// 결과: (NULL)

ORDER BY절에서의 CASE문 사용

정렬을 위한 ORDER BY절에서도 CASE문을 사용할 수 있다.

1) 특정 조건일때 특정한 값을 기준으로 정렬하는 식으로 사용할 수 있으나, 한 조건당 하나의 기준만으로 정렬한다.
,(콤마)를 이용해 기준을 여러개 줄 수 없다는 의미.

2) ASC(오름차순)이나 DESC(내림차순) 역시 CASE문 내에서는 사용불가.
사용하기 위해서는 END문을 통해 CASE문이 끝난 뒤 ASC, DESC 속성을 기입한다.

3) 하나의 CASE문에서는 조건을 비교할때 문자열이면 모두 문자열, 숫자형이면 모두 숫자형으로 적용된다.
만약 1~4번 조건은 문자열, 5번 조건은 int형이라면 5번조건도 자동적으로 문자열로 변환하여 정렬을 적용하므로 순서가 이상할 수 있음.

여기에 대한 개인적인 메모는 22년7월3주(수)에 기록. -비공개문서-


참고 링크


수정이력

220721 수정_ORDER BY절에서의 CASE문 사용 내용추가

profile
천 리 길도 가나다라부터

0개의 댓글