티스토리 뷰
5. 일반함수
오늘은 ORACLE SQL에서 가장 많이 쓰이며,
유용한 함수인 nvl, decode, case에 대하여 알아보자!
nvl
null이 있다면 출력값을 변경해주는 함수
기존 데이터셋
select ename, comm
from emp;
↓ null값을 숫자로 변경하자!
select ename, nvl(comm, 0)
from emp;
만약 'no comm', '값 없음'등의 문자형 데이터로 변경하려면
현재 숫자형 데이터인 comm을 to_char를 통해 문자형으로 변경한 후,
바꿀 문자형 데이터를 입력해야 오류가 발생하지 않는다.
<문자형 데이터로 바꿔주지 않아서 오류 발생>
↓ 숫자형 데이터를 문자형 데이터로 바꿔주자!
select ename, nvl(to_char(comm), '없음')
from emp;
decode
decode는 if-else문과 동일한 조건문으로 사용 가능한 함수이다.
사용 방법은 decode( ⓐ , ⓑ , ⓒ , ⓓ )
"만약 ⓐ가 ⓑ라면 ⓒ를 출력하고 나머지는 ⓓ를 출력하라" 이다.
예제) emp테이블 내 데이터를 기반으로 보너스를 주려고 한다.
만약 부서번호가 10번이면 월급을 20% 증가해서 출력하고,
부서번호가 20번이면 월급을 30% 증가해서 출력하고,
나머지는 부서번호는 그냥 월급을 출력하라!
select ename, sal, deptno,
decode(deptno, 10, sal_1.2, 20, sal_1.3, sal) 보너스
from emp;
decode 함수의 활용성은 가히 엄청나다.... 잘 알아두자
decode만 잘쓴다면 원하는 코드를 구현할 수 있다. (물론 하드코딩일수 있다.)
case
decode의 부족한 점을 채워주는 함수로 부등호 조건(>=, <=) 이 사용 가능하다.
사용하는 방법은 아래와 같다.
case when 조건1 then 출력값1
when 조건2 then 출력값2
else 출력값 end
예제) 직업이 SALESMAN이고 월급이 1000 이상이면 보너스를 9000,
직업이 ANALYST이고 월급이 2500 이상이면 보너스를 8000,
나머지 사원들은 0을 지급하시오!
select ename, sal, job,
case when (job = 'SALESMAN' and sal>=1000) then 9000
when (job = 'ANALYST' and sal>=2500) then 8000
else 0 end as 보너스
from emp;
어떤 경우에는 긴 case문이 간결한 decode문으로,
어떤 경우에는 긴 decode문이 간결한 case문으로 줄어드니
유연하게 두 함수를 사용할 줄 알아야 한다.
+ 형변환 추가 설명
where sal(숫자) = '3000'(문자);
→ 데이터의 형태는 다르지만, 올바르게 출력된다.
(오라클이 오류를 인지하고 형변환해준다 - Optimizer)
이것을 암시적 형변환이라고 한다.
보통 숫자가 문자보다 우선순위가 높아서 문자를 숫자로 변경해주는 것이지만,
반대의 경우에도 적용된다.
※ 암시적 형변환 확인할 수 있는 코드
set autot on
확인하고자 하는 코드
select ename, sal
from emp
where sal(숫자) like '30%'(문자);
→ 숫자가 문자보다 우선순위가 높지만 '%'를 숫자로 변경할 수 없기에 sal을 문자로 변경해준다.
like는 문자형 데이터 타입 컬럼에 사용해야 성능이 잘 나오고 숫자형 데이터 타입 컬럼에 사용하면 성능이 느려진다.
=================이 글은 Markdown을 활용해 작성하였습니다=================
'SQL' 카테고리의 다른 글
[SQL] 7. 데이터 분석함수 (0) | 2018.01.26 |
---|---|
[SQL] 6. 그룹함수(복수행함수) (0) | 2018.01.23 |
[SQL] 4.날짜함수 & 변환함수 (0) | 2018.01.21 |
[SQL] 3. 문자함수 & 숫자함수 (0) | 2018.01.20 |
[SQL] 2. 데이터 제한 및 정렬 (0) | 2018.01.20 |
- Total
- Today
- Yesterday
- Data Analysis
- 하둡2.7
- 하둡
- hadoop 2.7 install
- Big Data
- hadoop install
- hadoop
- 빅데이터
- 데이터 분석
- data
- 하둡설치
- 하둡 설치 가이드
- hadoop setup
- 하둡설치가이드
- hadoop2.7
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |