본문 바로가기
SQL/oracle

oracle SQL - 일반함수 (NVL, NVL2, NULLIF, COALESCE)

by jun.s.gi 2022. 12. 7.
728x90

일반함수?

 - 표현식에 NULL 값을 비롯한 모든 데이터유형의 데이터를 사용할 수 있는 함수


NVL(표현식 1, 표현식 2)

표현식 1에는 NULL을 포함하는 열 이름 또는 표현식이온다.

표현식 2에는 NULL값을 변환할 대상 값이 온다.

 

사원의 연간 총 급여를 구할 때 연간 급여 + 커미션을 곱한 값을 구할 때 다음과 같이 작성하면

select emp_name, salary, comm, (salary*12) + (salary * 12 * comm) ANN_SAL
from y_emp;

이처럼 잘못된 결과를 반환한다. 

 

NVL함수를 사용하면 해결할 수 있다.

select emp_name, salary, comm, (salary * 12) + (salary * 12 * NVL(comm, 0)) ANN_SAL
from y_emp;

 

 

부서가 정해지지 않은 사원의 dept_id열에 'Not Yet'이라는 텍스트로 반환할 때는

select emp_name, NVL(TO_CHAR(dept_id), 'Not Yet') dept_id
from y_emp
where dept_id is Null;

NULL값 대신 Not Yet으로 바뀜

 


NVL2(표현식1, 표현식2, 표현식3)

표현식1이 NULL이 아니면 표현식2, NULL인 경우 표현식3

표현식1 == Null ? 표현식3 : 표현식2;

select emp_name, (salary * 12)+(salary * 12 * NVL(comm, 0)) ANN_SAL,
		NVL2(comm, 'SAL+COMM', 'SAL') BIGO
from y_emp;

두 번째 줄을 해석하자면 comm값이 NULL이면 SAL을 반환하고 NULL이 아닌 값을 가지고 있으면 SAL+COMM을 반환한다.

커미션을 받은 사람과 그렇지 않은 사람들을 구분

 


NULLIF(표현식1, 표현식2)

두 표현식을 비교하여 동일한 경우 NULL을 반환하고 그렇지 않으면 첫 번째 표현식을 반환합니다.

 

사번과 이름 그리고 이름의 길이가 3이면 NULL, 아니면 이름의 길이를 반환합니다.

 

 

 


COALESCE (표현식1, 표현식2, 표현식3,,,,,,,,표현식n)

NVL 함수와 비슷하지만 인수의 개수에 제한이 없다.

표현식1이 NULL이 아니라면 해당 표현식을 반환하고 만약 NULL이라면 나머지 표현식에 대해 COALESCE 함수를 계속 저용하여 처음으로 NULL이 아닌 값을 반환해준다.

6번, 12번 행의 경우 comm열이 NULL이 아니기 때문에 해당 값을 보여준다.

만약 comm과 salary 모두 NULL일 경우 맨 마지막 0으로 반환한다.

728x90