본문 바로가기

SQL

SQL [8] - NVL, DECODE, CASE 조건에 따른 치환 함수

1. NVL / NVL2

(1) NVL

-- nvl : null 값을 다른 값으로 치환하는 함수 
-- nvl(컬럼명, 치환값) 
Quiz. 보너스 값이 null인 값을 0으로 치환하여 출력하기
select name, bonus from professor;

null

select name, nvl(bonus,0) from professor;

null 제거

Quiz. 학생의 이름과 지도 교수 번호 출력하기. 단 지도 교수가 없는 학생의 지도 교수 번호는 9999
select name, nvl(profno,'9999') from student;

(2) NVL2

-- nvl2(컬럼, null이 아닌 치환값, null인 치환값)

Quiz. 교수의 이름 급여 보너스 연봉 출력하기. 연봉 : 급여*12+보너스, 보너스가 없으면 급여*13 계산하기
select name, pay, bonus, nvl2(bonus,pay*12+bonus,pay*13) 연봉 from professor ;

2. DECODE

-- decode 함수 : 조건
-- decode('A','B','T','F') : 'A'가 'B'라면 'T' 아니면 'F'

 

select decode('a','b','True','False')
from dual;

Quiz 교수이름, 학과번호, 학과명 출력하기 / 101학과는 컴공과 아니면 null
select name, deptno, decode(deptno,101,'컴퓨터공학과','')
from professor;

Quiz 학생의 이름 전화번호 지역명 출력하기. 지역명은 전화번호의 지역 구분이 02이면 서울, 051이면 부산, 052이면 울산, 055면 경남 그외는 기타

select name, tel, decode(substr(tel,1,instr(tel,')',1)-1),02,'서울',051,'부산',052,'울산',055,'경남','기타') "지역"
from student
order by 지역 desc

;

3. CASE 

-- case 구문 : 조건문, decode 함수와 같은 기능. decode는 범위 지정을 못하지만 case는 가능
-- 범위 지정 가능 / 깔끔하고 가독성 있게 코딩 가능

 

case when 조건, then 결과 end 형식.  

<1>
  case 조건 값
    when 값1 then '문자열'
    when 값2 then '문자열'
    when 값3 then '문자열'
    else '문자열'
    end "알리아스"
    
 <2>
  case 
    when 조건문1 then '문자열'
    when 조건문2 then '문자열'
    when 조건문3 then '문자열'
    else '문자열'
    end "알리아스"

 

위의 decode로 푼 문제를 case로 풀어보기.

Quiz 학생의 이름 전화번호 지역명 출력하기. 지역명은 전화번호의 지역 구분이 02이면 서울, 051이면 부산, 052이면 울산, 055면 경남 그외는 기타

 

select name, tel, 
  case substr(tel,1,instr(tel,')',1)-1)
    when '02' then '서울'
    when '051' then '부산'
    when '052' then '울산'
    when '055' then '경남'
    else '기타' 
    end 지역   
from student
order by 지역 desc
;