< NULL 처리 함수 >
1) NVL(컬럼, 해당컬럼값이 NULL일 경우 반환할 값)
SELECT EMP_NAME, NVL(BONUS,0)
FROM EMPLOYEE;
SELECT EMP_NAME, NVL(BONUS,'없음') -- BONUS컬럼이 NUMBER타입이기 때문에 반환값도 NUMBER타입 이어야함 (문자열 출력 불가)
FROM EMPLOYEE;
-- 전체 사원의 이름, 보너스포함 연봉
SELECT EMP_NAME, (SALARY+ SALARY*NVL(BONUS,0))*12,NVL(DEPT_CODE,'부서없음')
FROM EMPLOYEE;
2) NVL2 (컬럼,반환값1, 반환값2)
- 컬럼값이 존재할 경우 반환값1 반환
- 컬럼값이 존재하지 않을 경우 반환값2 반환
SELECT EMP_NAME, BONUS, NVL2(BONUS,0.7,0.1)
FROM EMPLOYEE;
SELECT EMP_NAME,NVL2(DEPT_CODE,'부서있음', '부서없음')
FROM EMPLOYEE;
3) NULLIF(비교대상1, 비교대상2)
- 두개의 값이 일치하면 NULL을 반환,
- 두개의 값이 일치하지 않으면 비교대상1의 값을 반환
SELECT NULLIF('123','123') FROM DUAL; -- NULL
SELECT NULLIF('123','456') FROM DUAL; -- 123
< 선택함수 >
1) DECODE(비교하고자하는 대상 컬럼|산술연산|함수식, 비교값1, 결과값1, 비교값2, 결과값2, ... , 결과값N)
예시1) 주민번호 8번째 자리가 1또는 3이면 남자, 2또는 4면 여자출력
SELECT EMP_ID, EMP_NAME, EMP_NO, DECODE(SUBSTR(EMP_NO,8,1),1,'남',3,'남',2,'여',4,'여')"성별"
FROM EMPLOYEE;
예시2) 직원의 급여 조회시 각 직급별로 인상시켜셔 조회
J7 급여 10%인상 (SALARY*1.1)/J6 급여 15%인상 (SALARY*1.15)/J5 급여 20%인상 (SALATY*1.2)
그 외의 사원은 급여를 5%인상 (SALARY * 1.05)
SELECT EMP_NAME,JOB_CODE, SALARY,
DECODE(JOB_CODE,'J7',SALARY*1.1,
'J6',SALARY*1.15,
'J5',SALARY*1.2,
SALARY*1.05)"인상된급여"
FROM EMPLOYEE;
2) CASE WHEN THEN
[표현법1]
CASE WHEN 조건식1 THEN 결과값1
WHEN 조건식2 THEN 결과값2
...
ELSE 결과값N
END
[표현법2]
CASE 비교대상컬럼|산술연산식|함수식
WHEN 비교값1 THEN 결과값1
WHEN 비교값2 THEN 결과값2
...
ELSE 결과값N
END
SELECT EMP_ID, EMP_NAME, EMP_NO,
CASE WHEN SUBSTR(EMP_NO,8,1) IN('1','3') THEN '남'
WHEN SUBSTR(EMP_NO,8,1) IN('2','4') THEN '여'
END "성별"
FROM EMPLOYEE;
SELECT EMP_ID, EMP_NAME, EMP_NO,
CASE SUBSTR(EMP_NO,8,1)
WHEN '1' THEN '남'
WHEN '2' THEN '여'
END "성별"
FROM EMPLOYEE;
'ORACLE' 카테고리의 다른 글
ORACLE 03. SELECT _ GROUP BY절 (0) | 2022.11.16 |
---|---|
ORACLE 02. SELECT(함수) _ 그룹함수 (0) | 2022.11.16 |
ORACLE 02. SELECT(함수) _ 단일행 함수_ 형변환 함수 (0) | 2022.11.16 |
ORACLE 02. SELECT(함수) _ 단일행 함수_날짜처리함수 (0) | 2022.11.15 |
ORACLE 02. SELECT(함수) _ 단일행 함수_숫자처리함수 (0) | 2022.11.15 |