본문 바로가기
기타 IT 지식/SQL

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

by 코뮤(commu) 2021. 3. 15.
728x90
반응형

 

 

nvl 함수

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 의 값이 널이면 '해당 없음'

 

 

 

 

 

switch-case 문과도 비슷한 느낌을 얻을 수 있다.

728x90
반응형