본문 바로가기
Database/SQL

[Oracle, SQL] NULL 제거하기

by LasBe 2021. 12. 3.
반응형

⚡️null 값이 포함 된 칼럼 제외


📌 ~WHERE [칼럼] IS NOT NULL

 

select ename, sal, comm, sal+comm 
from emp;

null이 포함될 경우

select ename, sal, comm, sal+comm 
from emp 
where comm is NOT NULL;

null 값이 포함된 행을 제거했을 경우

 

 

⚡️NULL 값 치환


📌 NVL(컬럼, 치환할 값)

 

널 값을 만나면 다른 값으로 치환해서 출력하는 함수이다.

select name, pay, nvl(bonus, 0), pay*12+nvl(bonus, 0) 연봉
from professor
where deptno = 101;

null 값을 0으로 치환했다.

 

만약 nvl함수가 없다면

select name, pay, bonus, pay*12+bonus 연봉
from professor
where deptno = 101;

NULL 값과 계산하는 수식의 결과도 NULL이 나오는 것을 볼 수 있다.

 


📌 NVL2(컬럼, NOT NULL일 경우, NULL일 경우)

NVL2 함수는 컬럼의 값들 중 널이 아닌 값과 널인 값의 상황을 모두 고려해서 사용이 가능하다.

바로 위의 코드에서는 NVL 함수를 사용해 널 값을 제거하지만 연봉이 제대로 계산되지 않는다.

select name, pay, bonus, nvl2(bonus, pay*12+bonus, pay*12) 연봉
from professor
where deptno = 101;

하지만 NVL2 함수를 사용하면 보너스가 널 값이여도 제대로 연봉 계산이 되는 것을 볼 수 있다.

 

 

널의 대체값으로 문자열을 사용할 수도 있다.

select name, pay, bonus, nvl2(bonus, to_char(pay*12+bonus), '보너스 없음') 연봉
from professor
where deptno = 101;

not null 부분에 to_char() 함수로 형 변환을 해주었다.

nvl2 함수의 두가지 치환 값은 같은 형태로 입력되어야 오류가 나지 않게 된다.

반응형

댓글


오픈 채팅