본문 바로가기
CS/DB

CASE문

by 넬준 2021. 12. 3.
CASE WHEN 조건식1 THEN 식1
[ WHEN 조건식2  THEN 식2 ]
[ ELSE 식3 ]
END

 

ELSE는 생략 가능하며 생략했을 시 'ELSE NULL'로 간주한다.

 

예) a열의 값이 NULL값일 때 이를 0으로 변환하고 싶을 때

 

SELECT a, CASE WHEN a IS NULL THEN 0 END "a(null=0)" FROM table;

 

결과)

 

a a(null=0)
1 1
2 2
NULL 0

 

NULL값을 변환할 때는 COALESCE 함수 사용 가능하다.

 

SELECT a, COALESCE(a, 0) FROM table;

 

NULL이 아니면 첫 번째 인수의 값을 반환(a열 값)

NULL인 경우 두 번째 인수의 값을 반환(0)

 

 

서로 다른 형식의 CASE문

 

SELECT a "코드",
 CASE
 WHEN a=1 THEN '남자'
 WHEN a=2 THEN '여자'
 WHEN a IS NULL THEN '데이터 없음'
 ELSE '미지정'
END "성별" FROM table;

 

SELECT a "코드",
 CASE a
 WHEN 1 THEN '남자'
 WHEN 2 THEN '여자'
 /* WHEN NULL THEN '데이터 없음'   <-  이 경우는 a = NULL 연산을 하기 때문에 NULL 값이라 하더라도 참이 되지 않아 '미지정' 값이 나온다.*/
 ELSE '미지정'
END "성별" FROM table;

 

두 번째 방식으로는 NULL 값을 비교할 수 없다.

그래서 NULL값 변환 시에는 SQL표준인 COALESCE 함수를 사용!

 

CASE문은 SELECT 구 뿐만아니라 WHERE 구, ORDER BY 구 등 여러 군데에서 사용 가능하며,

ELSE 문은 생략 시 NULL로 간주되기 때문에 되도록이면 생략하지 않는 것이 낫다.

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

집계함수 - COUNT / SUM / AVG / MIN / MAX  (0) 2021.12.03
데이터 추가, 갱신, 삭제 - INSERT / UPDATE / DELETE  (0) 2021.12.03
연산  (0) 2021.12.03
결과 행 제한(LIMIT OFFSET)  (0) 2021.12.03
정렬 (ORDER BY)  (0) 2021.12.03

댓글