[오라클(Oracle) ] 일반 함수( nvl / nvl2 / decode / case 함수)
1. nvl함수(nvl , nvl2 , nullif , coalesce)
2. decode 함수
3. case 함수
1. nvl함수(nvl , nvl2 , nullif , coalesce)
(1) nvl 함수
null 값을 0 또는 다른 값으로 바꿔주는 함수이다.
1
|
nvl(칼럼, 대체할 값)
|
cs |
첫 번째 인수로 null이 포함되어 있는 칼럼 또는 식을 넣고 두 번째 인수로 null일 경우 대체할 값을 넣는다. 단, 이때 두 인수의 데이터 타입은 반드시 동일해야 한다.
ex) professor 테이블에서 교수의 연봉(sal * 12 + comm)을 출력 (※ comm 칼럼에 null 포함)
1
2
|
select sal*12 + nvl(comm,0)
from professor;
|
cs |
ex) professor 테이블에서 교수의 입사일을 출력(단, hiredate이 null인 경우 2022-01-25로 지정)
(2) nvl2 함수
nvl2 함수의 경우에는 첫 번째 인수가 null이 아니면 두 번째 인수를 출력, 첫 번째 인수가 null이면 세 번째 인수를 출력한다.
1
|
nvl(인수1, 인수2, 인수3)
|
cs |
위의 예시와 동일하게 professor 테이블에서 교수의 연봉(sal * 12 + comm)을 출력한다고 하자. comm 칼럼에는 null 값이 포함되어 있으므로 nvl2 함수를 활용할 수 있다. 이때 comm 칼럼이 null이 아니라면 원래의 연봉식 그대로인 [ sal * 12 + comm ]를 사용하면 되고 comm 칼럼이 null인 경우에는 comm을 0 취급하면 되므로 [ sal*12 ] 를 출력한다.
1
2
|
select nvl2(comm, sal * 12 + comm, sal * 12)
from professor;
|
cs |
(3) nullif 함수
nullif는 두 개의 인수를 비교하여 값이 같으면 null, 다르면 첫 번째 값을 출력하는 함수이다.
1
|
nullif(인수1, 인수2)
|
cs |
인수로 '사과'와 '사과'를 넣으면 두 값이 같으므로 null을 출력하고 '사과'와 '체리'를 넣으면 두 값이 다르므로 첫 번째 인수인 '사과'를 출력한다.
1
2
3
|
select nullif('사과', '사과'), ---- null
nullif('사과', '체리') ---- 사과
from dual;
|
cs |
(4) coalesce 함수
coalesce 함수는 인수들 중에서 null이 아닌 첫 번째 인수를 반환하는 함수이다.
1
|
coalesce(인수1, 인수2, 인수3,......인수n)
|
cs |
넣어주는 인수의 개수에는 제한이 없지만 n번째 인수까지 모두 사용하지 않으면 버그의 원인이 될 수 있으니 주의해야 한다.
ex) professor 테이블에서 comm이 null이 아니면 comm을 출력, comm은 0이지만 sal이 null이 아닌 경우엔 sal을 출력, 둘 다 null인 경우 0을 출력
1
2
|
select coalesce(comm, sal, 0)
from professor;
|
cs |
2. decode 함수
decode 함수는 =비교를 통해 조건과 일치하는 경우 해당 값을 반환하는 함수이다.
1
2
3
4
|
decode(칼럼, 값1, 결과1
값2, 결과2
값3, 결과3
값4, 결과4,.....)
|
cs |
칼럼 값이 값1일 경우 결과1일 출력, 값2일 경우 결과2 출력, 값3일 경우 결과3을 출력한다. 칼럼 값과 일치하는 값이 없는 경우 null값이 반환된다.
ex) professor 테이블에서 이름, 학과번호, 그리고 새로운 칼럼 '학과명'을 추가하여 출력(학과번호가 101이면 '컴공', 102면 '화학', 201이면 '수학', 301이면 회계)
1
2
3
4
5
|
select name, deptno, decode(deptno, 101, '컴공',
102, '화학',
201, '수학',
301, '회계') as 학과명
from professor;
|
cs |
3. case 함수
case 함수는 = 비교만 가능했던 decode 함수의 기능을 확장한 함수이다. case 함수는 산술 연산, 논리 연산 등 다양한 비교가 가능하며 when 절을 사용하여 여러 상황을 가정하고 표현식을 사용할 수 있다.
위의 예제를 동일하게 case 함수에 적용시켜보면 다음과 같다.
1
2
3
4
5
6
|
select name, deptno, case when deptno = 101 then '컴공'
when deptno = 102 then '화학'
when deptno = 201 then '수학'
when deptno = 301 then '회계'
END as 학과명
from professor;
|
cs |
ex) student 테이블에서 '등급' 칼럼(점수가 90 이상이면 'A', 80 이상이면 'B', 70 이상이면 'C', 그 외에는 'D')을 출력
1
2
3
4
5
6
|
select case when score >= 90 then 'A'
when score >= 80 then 'B'
when score >= 70 then 'C'
when score < 70 then 'D'
END as 등급
from student;
|
cs |
[오라클(Oracle) ] 일반 함수( nvl / nvl2 / decode / case 함수)
-요약-
1. nvl함수(nvl , nvl2 , nullif , coalesce)
- nvl 함수: null 값을 0 또는 다른 값으로 바꿔주는 함수
- nvl2 함수: 첫 번째 인수가 null이 아니면 두 번째 인수를 출력, 첫 번째 인수가 null이면 세 번째 인수를 출력하는 함수
- nullif 함수: 두 개의 인수를 비교하여 값이 같으면 null, 다르면 첫 번째 값을 출력하는 함수
- coalesce 함수: 인수들 중에서 null이 아닌 첫 번째 인수를 반환하는 함수
2. decode 함수
- =비교를 통해 조건과 일치하는 경우 해당 값을 반환하는 함수
- decode(칼럼, 값1, 결과1, 값2, 결과2,....) : 칼럼 값이 값1이면 결과1 출력, 값2면 결과2 출력...
3. case 함수
- decode 함수 기능 확장하여 =비교 외에도 다양한 연산과 비교 활용 가능한 함수
- case when 조건 then 결과1...
댓글