ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL - NULL 관련 함수, 선택 함수
    DataBase/Oracle 2022. 1. 19. 19:23
    728x90
    반응형

    SQL - NULL 관련 함수

     

    NVL(NULL, 대체값)

     

     반환 값이 NULL일 경우에 대체 값을 제공

    --AGE가 NULL이면 +3해도 NULL값이 나온다
    SELECT AGE + 3 FROM MEMBERS;
    SELECT NVL(AGE, 0) FROM MEMBERS;    -- AGE가 NULL이면 0값으로 대체

     

     

    NVL2(입력값, NOTNULL 대체값, NULL 대체값)

     

     NVL에서 조건을 하나 더 확장

    -- AGE값을 100/AGE로 바꾸는데 NULL일 경우 0으로 대체
    SELECT NVL2(AGE, 100/AGE, 0) FROM MEMBERS;

     

    NULLIF(값1, 값2)

     

     두 값이 같은 경우 NULL 그렇지 않는경우 첫번째 값 반환

    SELECT NULLIF(AGE, 19) FROM MEMBERS; -- AGE가 19일 때만 NULL로 변경

     

     

    선택 함수

     

    DECODE(기준값, 비교값, 출력값, 비교값, 출력값)

     

     조건에 따른 값 선택하기

     

    -- GENDER의 값이 '남성'일 경우 1, 아니면 2
    SELECT DECODE(GENDER, '남성', 1, 2) FROM MEMBERS;
    -- GENDER의 값이 '남성'일 경우 1, 아니면 NULL
    SELECT DECODE(GENDER, '남성', 1) FROM MEMBERS;
    -- 011이면 SK 016 이면 KT, 나머지는 '기타' 출력
    SELECT DECODE(SUBSTR(PHONE, 1, 3), '011', 'SK', '016', 'KT', '기타') FROM MEMBERS;
    
    -------------------------------------------------------------------
    
    -- 직원의 급여를 인상하고자 한다.
    -- 직급코드가 J7인 직원은 급여의 10%를 인상하고
    -- 직급코드가 J6인 직원은 급여의 15%를 인상하고
    -- 직급코드가 J5인 직원은 급여의 20%를 인상한다.
    -- 그 외 직급의 직원은 5%만 인상한다.
    -- 직원 테이블에서 직원명, 직급코드, 급여, 인상급여(위 조건)을 조회하세요
    
    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;

     

    CASE

     

    • CASE
             WHEN 조건식 THEN 결과값
             ....
             ELSE 결과값
      END

     

    -- 사번, 사원명, 급여를 EMPLOYEE 테이블에서 조회하고
    -- 급여가 500만원 초과이면 '고급'
    -- 300~500만원 사이이면 '중급'
    -- 그 이하는 '초급'으로 출력 처리하고 별칭은 '구분'으로 한다.
    SELECT 
        EMP_ID,
        EMP_NAME,
        SALARY,
        CASE 
            WHEN SALARY > 5000000 THEN '고급'
            WHEN SALARY BETWEEN 3000000 AND 5000000 THEN '중급'
            ELSE '초급'
        END 구분
    FROM 
        EMPLOYEE;

     

     

    728x90
    반응형

    'DataBase > Oracle' 카테고리의 다른 글

    SQL - ORDER BY, GROUP BY, HAVING  (0) 2022.01.19
    SQL - 집계 함수  (0) 2022.01.19
    SQL - 형식 변환 함수와 포맷 문자  (0) 2022.01.19
    SQL - 날짜 내장 함수  (0) 2022.01.19
    SQL - 숫자 내장 함수  (0) 2022.01.19

    댓글

Designed by Tistory.