⑤ null 관련 함수
nvl(exp,변환할 값)
: null값을 실제값으로 리턴하는 함수.
입력되는 인수값들의 데이터 타입이 일치해야한다.
nvl2(exp1,exp2,exp3)
: exp1가 null이 아니면 exp2를 수행하고, exp1가 null이면 exp3을 수행한다.
exp2,exp3의 데이터 타입은 일치해야한다.
coalesce(exp1,exp2,exp3,...,expn)
: null이 발생하지 않을때까지 표현식을 수행하는 함수.
첫번째 exp1이 null이면 두번째 exp2를 수행하고
두번째 표현식도 null 이면 exp3을 수행한다.
nullif(exp1,exp2)
: 두 표현식을 비교해서 같으면 null을 리턴하고
같지 않으면 exp1를 리턴한다.
조건제어문
if를 사용할 수 있도록 decode 함수, case 표현식을 제공한다
if 기준값 = 비교값1 then
참값1
else if 기준값 = 비교값2 then
참값2
else if 기준값 = 비교값3 then
...
else
기본값
end if;
decode(기준값,비교값1,참값1,기본값)
: decode함수는 기준값과 비교값을 같다(=) 비교연산자만 사용한다.
case 표현식
: 기준값과 비교값에 대해서 모든 비교연산자를 사용할 수 있다.
기준값 = 비교값 | 기준값 비교연산자(=.>,≥,<,≤,≠,<>,^=,in, between and,like) 비교값 |
case 기준값 when 비교값1 then 참값1 when 비교값2 then 참값2 .... else 기본값 end |
case when 기준값 비교연산자 비교값1 then 참값1 when 기준값 비교연산자 비교값2 then 참값2 ... else 기본값 end |
decode,case 표현식에서 null check 방법
nvl2(exp1,exp2,exp3)
= decode(exp1, null, exp3, exp2)
= case
when exp1 is null then exp3
else exp2
end
[문제29] 사원들의 급여를 기준으로 출력해주세요.
~4999 : low
5000~9999 : medium
10000~19999 : good
20000~ : excellent
select employee_id, salary,
case
when salary <5000 then 'low' when salary <10000 then 'medium'
when salary <20000 then 'good'
else 'excellent'
end
from employees;
[문제30] JOB_ID 열의 값을 기반으로 모든 사원의 등급을 표시하는 query를 작성합니다.
JOB_ID GRADE
AD_PRES A
ST_MAN B
IT_PROG C
SA_REP D
ST_CLERK E
Z
...
1. decode
select job_id, decode(job_id, 'AD_PRES','A',
'ST_MAN','B',
'IT_PROG','C',
'SA_REP','D',
'ST_CLERK','E',
'Z') "GRADE"
from employees;
2. case
select job_id,
case job_id
when 'AD_PRES' then 'A'
when 'ST_MAN' then 'B'
when 'IT_PROG' then 'C'
when 'SA_REP' then 'D'
when 'ST_CLERK' then 'E'
else 'Z'
end "GRADE"
from employees;
'SQL' 카테고리의 다른 글
[Oracle] Oracle 조인 (0) | 2021.12.23 |
---|---|
[Oracle] 그룹함수 - group by절, having절 (0) | 2021.12.23 |
[Oracle] 단일행 함수 - 형변환 함수 (0) | 2021.12.22 |
[Oracle] 단일행 함수 - 날짜함수 (0) | 2021.12.22 |
[Oracle] 단일행 함수 - 숫자함수 (0) | 2021.12.22 |