< 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;

 

복사했습니다!