※ 이 글은 오지영 강사님의 <업무에 바로 쓰는 SQL 활용실습>의 강의내용을 바탕으로 작성하였습니다.
1. null값을 다른값으로 변경해 주는 함수
NVL(비교대상, null일 때의 값)
SELECT ename, sal, comm, NVL( comm, -7)
FROM emp;
SELECT ename, sal, comm, sal+comm
FROM emp;
SELECT ename, sal, comm, sal+NVL(comm, 0)
FROM emp;
※ 비교대상과 null일 때의 값이 동일한 데이터타입이어야 한다.
SELECT ename, comm, NVL(comm, ‘미정’)
FROM emp; --에러
SELECT ename, comm, NVL(to_char(comm), ‘미정’)
FROM emp;
NVL2(비교대상, null이 아닐 때의 값, null일 때의 값)
SELECT ename, comm , NVL2( comm, comm+ 500, 100)
FROM emp ;
NULLIF( 비교대상, 비교값) | 비교대상=비교값인경우 null로 변환
SELECT ename, deptno, NULLIF(deptno, 30)
FROM emp ;
2. CASE문
SELECT에서 조건을 지정할 수 있는 함수
형식
SELECT 컬럼명1, 컬럼명2
CASE when 조건식1 then 처리1
when 조건식2 then 처리2
.
.
.
when 조건식N then 처리N
else 기타처리
END
FROM 테이블명;
SELECT ename, deptno,
CASE
WHEN deptno=30 THEN 'A팀'
WHEN deptno=20 THEN 'B팀'
WHEN deptno=40 THEN 'C팀'
ELSE 'F팀'
END 팀정보
FROM emp;
3. DECODE문
CASE문과 마찬가지로 SELECT에서 조건을 지정할 수 있는 함수
형식
DECODE(비교대상, 값1, 처리1, 값2, 처리2, … , 값N, 처리N, 기타처리)
SELECT ename, deptno, DECODE(deptno, 30, 'A팀', 20, 'B팀', 40, 'C팀', 'F팀') 팀정보
FROM emp;
연습문제
1.EMP사원 이름, 팀 조회하기(이름에 A문자 포함되어 있음 A팀, 없음 B팀으로)
1) CASE
SELECT ename,
CASE
WHEN ename LIKE '%A%' THEN 'A팀'
ELSE 'B팀'
END team
FROM emp;
2) DECODE
SELECT ename, DECODE(INSTR(ename, 'A',1,1),0,'B팀', 'A팀')
FROM emp;
2. emp사원 이름, 급여, 팀 조회하기(급여 2700 이상은 A팀 미만은 B팀
1) CASE
SELECT ename, sal,
CASE
WHEN sal >=2700 THEN 'A팀'
ELSE 'B팀'
END team
FROM emp;
2) DECODE + TRUNC
SELECT ename, sal,
DECODE(TRUNC(sal/2700),1, 'A팀', 'B팀') team
FROM emp;
3) DECODE + SIGN
SELECT ename, sal,
DECODE(sign(sal-2700),1, 'A팀', 0, 'A팀', 'B팀') team
FROM emp;
'프로그래밍 > Database & SQL' 카테고리의 다른 글
[Oracle | 오라클] 함수(Function) (0) | 2015.10.17 |
---|---|
[Oracle | 오라클] 다중행 함수(그룹 함수) (0) | 2015.08.17 |
[Oracle | 오라클] 단일행 함수 - 4. 변환함수 (0) | 2015.08.17 |
[Oracle | 오라클] 단일행 함수 - 3. 날짜함수 (0) | 2015.08.13 |
[Oracle | 오라클] 단일행 함수 - 2. 숫자함수 (0) | 2015.08.13 |