본문 바로가기
오라클

오라클 - DECODE와 CASE 정리

by onggury 2023. 2. 8.

 

 

이번 글에서는 DECODE와 CASE에 대해서 정리해보겠습니다.

 

 

decode와 case는 마치 프로그래밍에서 if문을 쓰는 것과 거의 비슷합니다.

 

의미상으론 같다고 볼 수도 있겠네요.

 

 

if문은

만약 ~라면 .... 아니면 이거라면  ... 그 외에 아무것도 아니면 ...

이런식으로 흘러가죠.

 

 

decode와 case 도 똑같습니다. 

 

그런데 둘이 나눠진건 이유가 있겠죠.

 

하나하나 알아보겠습니다.

 

 

 


 

 

1. DECODE

 

-       decode(특정 컬럼, 만약 이거라면, 이렇게, 만약 이거라면, 이렇게, 둘 다 아니면 요거)

 

 

예시 문항을 들겠습니다.

job 컬럼이 'CLERK'이면 급여를 10퍼 인상
job 컬럼이 'SALESMAN'이면 급여를 5퍼 인상
둘 다 아니면, 기존 급여를 출력

 

 

위 예시를 decode로 표현하면 이렇습니다.

 

SELECT ename, job, sal, decode(job, 'CLERK', sal * 1.1, 'SALESMAN', sal * 1.05, sal) as new_sal
FROM emp;

 

 

 


 

 

 

2. CODE

 

 

code는 두 가지 종류가 있습니다.

 

 

 

1) 단순(simple) case : 이는 decode와 같은 역할을 수행합니다.

 

 

2) 검색(Search) case : 특정 컬럼에 종속되지 않고 컬럼을 지정해서 역할을 수행합니다.

 

 

decode에서 제시한 문제로 예시를 보겠습니다.

 

SELECT ename, job, sal, case when job = 'CLERK' then sal * 1.1
                                                   when  job = 'SALESMAN' then sal * 1.05
                                                   else sal end new_sal
FROM emp;

 

 

code의 형태를 잘 보시면

 

when과 then으로 이뤄져서, 'when ~라면, then 이렇게' 형태로 이뤄지다가

마지막에는 '다 아니면 else 이렇게' 로 끝내고

end로 마무리 지었습니다. 

 

 

즉, case는 사용자가 직접 검색을 하고 그에 맞는 조건을 설정할 수 있습니다.

 

 

문제 하나 보여드릴테니 직접 해보시길 추천합니다.

만약 급여가 3000 이상이면 '1등급'
급여가 1500 이상이면 '2등급'
그 외는 '3등급' 을 지정하고 HEADING을 grade로 표기한 쿼리를 작성하세요.

 

아래와 같이 결과가 나오시면 됩니다.

 

 

 

여기까지 decode와 case에 대한 정리 글이였습니다.