1. NVL / NVL2
(1) NVL
-- nvl : null 값을 다른 값으로 치환하는 함수
-- nvl(컬럼명, 치환값)
Quiz. 보너스 값이 null인 값을 0으로 치환하여 출력하기
select name, bonus from professor;
select name, nvl(bonus,0) from professor;
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
;
'SQL' 카테고리의 다른 글
SQL [10] - LAG, LEAD, RANK OVER, SUM OVER, LISTAGG (0) | 2021.05.02 |
---|---|
SQL [9] - GROUP BY와 HAVING (+ ROLL UP, GROUPING SET) (0) | 2021.05.02 |
SQL [7] - 형식 변환 (to_char, to_date, to_number) (0) | 2021.05.02 |
SQL [6] - 숫자 함수와 날짜 함수 (0) | 2021.04.28 |
SQL [5] - 문자 함수들 (0) | 2021.04.28 |