본문 바로가기
공부/Oracle

오라클 SQL 문법 공부12 - CASE 문 함수

by 리빈아빠 2017. 10. 17.
반응형

서론

CASE문 함수는 특정한 조건일때 특정한 행위를 하게 도와주는 함수이다. DECODE와 거의 비슷한 기능을 가진 함수이다.

본론

CASE 문

--case문
--CASE 조건 WHEN 결과1 THEN 출력1
--WHEN 결과 2 THEN 출력2
--ELSE 결과 3
--END "컬럼명"
--출력 데이터형이 모두 일치하여야 한다.
--동등비교 일때만 생략 가능

--5) emp테이블에서 sal이 1000미만 이면 c등급, 1000에서 3000미만 B등급
--3000이상이면 A등급으로 등급을 나타내어라
--이거 CASE문으로도 해보기
SELECT ENAME,
       SAL,
       CASE
         WHEN SAL < 1000 THEN 'C등급'
         WHEN SAL < 3000 THEN 'B등급'
         ELSE 'A등급'
       END AS "등급"
  FROM EMP;

CASE 문에서 위에 조건이라고 되어있는데 저기에는 컬럼이 들어가며 예를 들면 CASE COL WHEN '1' THEN '일' WHEN '2' THEN '이' 이런식으로 사용 된다. 하지만 이런 방식보단 위의 문제 풀이처럼 CASE WHEN COL = '1' THEN '일' WHEN COL = '2' THEN '이' 이런식으로 사용되는 경우가 많다.


END 이후에 ALIAS를 주는 것이 좋다.

실습문제

인용구

--5) emp테이블에서 sal이 1000미만 이면 c등급, 1000에서 3000미만 B등급
--3000이상이면 A등급으로 등급을 나타내어라
SELECT ENAME,
       SAL,
       DECODE(TRUNC(SAL/1000), 0, 'C등급', 1, 'B등급', 2, 'B등급', 'A등급')    
  FROM EMP;
--이것도 sign 써서 해도 됨
SELECT ENAME,
       SAL,
       DECODE(sign(sal-1000), -1, 'C등급', decode(sign(sal-3000), -1, 'B등급', 'A등급'))    
  FROM EMP;

--이 것을 CASE문으로 변경하시오.
SELECT ENAME,
       SAL,
       CASE TRUNC(SAL/1000) WHEN 0 THEN 'C등급'
       WHEN 1 THEN 'B등급'
       WHEN 2 THEN 'B등급'
       ELSE 'A등급'
       END AS "GRADE"
  FROM EMP;

결론

DECODE문과 매우 흡사하기 때문에 DECODE가 이해가 되었다면 CASE문도 쉽게 쓸 수 있을거라 생각이 든다. 실습에 관한 문제 데이터는 아래 링크에서 확인하자.

2017/09/19 - [공부/Oracle] - 오라클 SQL 문법 공부4 - 기본문법 실습