본문 바로가기

SQL

[Oracle] 단일행 함수 - null 관련 함수, 조건제어문

⑤ 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;
Recent Posts
Popular Posts
Recent Comments