-- nvl
SELECT comm,
nvl(comm, 0),
sal+comm,
sal+nvl(comm,0) -- nvl(comm,' ') : comm이 숫자형인데 초기값을 ' ' 공백을 문자열을 선언하면 에러
FROM emp;
CREATE TABLE EMP_CPY101
AS SELECT * FROM emp;
SELECT ename,
nvl(ename, '공백') 이름,
sal, nvl(sal,100) 급여
FROM emp_cpy101;
nvl2(데이터, null값이 아닐 때 처리, null값일 때 처리)
ex) comm이 null일때는 100으로, null이 아닐 때는 현재 sal의 10%로 처리.
-- nvl2
SELECT ename,
sal,
comm,
nvl2(comm, comm*1.1, 100) "보너스"
FROM emp;
SELECT nullif('a', 'a') "동일할 때",
nullif('a', 'b') "동일하지 않을 때",
nvl(NULLIF('a', 'a'),'동일') "동일할 때",
nvl(NULLIF('a','b'),'동일x') "동일하지 않을 때"
FROM dual;
SELECT ename,
deptno,
decode(deptno, 10, '인사과',
20, '총무',
30, '아이티사업부',
40, '재무',
'기타과') 부서명
FROM emp;
1) 형식1
CASE WHEN 논리/관계식1 THEN 처리할 데이터
WHEN 논리/관계식1 THEN 처리할 데이터 : 위에 선언된 논리/관계식 제외
...
ELSE 위에 선언된 논리/관리식이 아닐 때 처리할 데이터
END
2) 형식2
CASE 컬럼
WHEN 컬럼에 데이터1일때 THEN 처리할 데이터
WHEN 컬럼에 데이터2일때 THEN 처리할 데이터
...
ELSE 위에 WHEN에 나열된 데이터가 아닐 때, 처리할 데이터
END
SELECT ename,
deptno,
CASE WHEN deptno = 10 THEN sal * 0.2
WHEN deptno = 20 THEN sal * 0.5
WHEN deptno = 30 THEN sal * 0.7
ELSE sal*1.2
END 보너스
FROM emp;
ex) sal을 기준으로 5000 이상일 때, A등급, 4000~5000미만 B등급 .. CASE WHEN을 활용하여 이름, 급여, 급여등급을 출력하세요.
SELECT ename, sal,
CASE WHEN sal>=5000 THEN 'A등급'
WHEN sal>=4000 THEN 'B등급'
WHEN sal>=3000 THEN 'C등급'
WHEN sal>=2000 THEN 'D등급'
WHEN sal>=0 THEN 'F등급'
ELSE '데이터범위초과(숫자 0이상)'
END 등급
FROM emp;
ex) 직책의 종류를 확인하고, 직책에 따라서 출장지를 서울 대구 부산 광주 제주도로
설정하세요.
SELECT DISTINCT job FROM emp;
SELECT ename, job,
CASE job WHEN 'CLERK' THEN '서울'
WHEN 'SALESMAN' THEN '대구'
WHEN 'PRESIDENT' THEN '부산'
WHEN 'MANAGER' THEN '광주'
WHEN 'ANALYST' THEN '제주도'
ELSE '없음' END 출장지
FROM emp