관리 메뉴

FU11M00N

[ Oracle ] null 함수 (nvl 함수), decode 함수 본문

Programming/Oracle SQL

[ Oracle ] null 함수 (nvl 함수), decode 함수

호IT 2021. 3. 15. 23:28

 

저번 글 테이블값과 이어집니다.

 


 

 

- nvl 예제

 

문제 : emp 테이블에서 sal * comm 값이 100000보다 작은 사원만

empno, ename,sal, comm, sal*comm 을 출력을 하세요.

 

 

comm 값이 null 값인 경우가 있다면, where 절을 어떻게써야할지 애매할 때가 있습니다.

 

select empno, ename, sal, comm, rpad(to_char(sal*comm,'999,999,999'),12) as 지급금액
from emp
where sal*nvl(comm,0) <1000000;

 

nvl(comm,0) 이 뜻하는 바는, comm 의 값이 null 이라면 0으로 치환한다는 의미입니다.

 

 

 

 

 

문제 : emp 에서 comm 값이 null 인 경우는 '해당 없음' 으로,

아니라면 원래 값이 출력되도록 empno, ename,sal, comm 을 출력하세요.

 

 

select empno, ename, sal, lpad(nvl(to_char(comm),'해당 없음'),10)
from emp;

 

 

to_char 를 이용해서 comm 을 문자형으로 바꿔야 에러가 나지 않습니다.

 

- decode 함수

 

위 예제를 decode 함수를 이용해서 풀 수도 있습니다.

 

 

select empno, ename, sal, 
decode(comm,null,'해당없음')
from emp;

 

 

decode 함수를 사용하면, 굳이 형변환을 하지 않아도 '해당 없음' 을 출력해낼 수 있습니다.

 

 decode 함수는 다른 프로그래밍 언어의 삼항연산자와 비슷합니다.

 

decode(comm,null,'해당없음') 의 의미는 아래와 같습니다.

 

comm 의 값이 널이면 '해당 없음' 입니다.

 

 

 

Comments