hyeonga_code

Database_21_일반 함수_NVL, NVL2, COALESCE 본문

Oracle Database

Database_21_일반 함수_NVL, NVL2, COALESCE

hyeonga 2023. 7. 24. 05:59
반응형

-- SQL 함수
    -- 일반 함수
        -- 모든 데이터 유형을 사용할 수 있습니다.
        -- 널 값을 사용할 수 있습니다.
        -- NVL( expr 1, expr 2 ) 
            -- 널 값을 실제 값으로 변환합니다.
            -- 사용되는 데이터 유형 : 날짜, 문자, 숫자
            -- 데이터 유형은 서로 일치해야 합니다.
        -- NVL2( expr 1, expr 2, expr 3 ) 
            -- expr 1이 null이 아닌 경우 expr 2를 반환하고 expr 1이 null인 경우 expr 3을 반환합니다.
        -- COALESCE( expr 1, expr 2, .... expr n ) 
            --표현식 리스트에서 처음으로 null이 아닌 표현식을 반환합니다.
            
        -- NVL
SELECT last_name, commission_pct, NVL(commission_pct, 0)
FROM employees; 
    /*
    LAST_NAME   COMMISSION_PCT  NVL(commission_pct, 0)
    -------------------------------------------------------------------------------------
    Matos                 ( null )                          0                           
    Vargas                ( null )                          0
    Zlotkey                0.2                               0.2
    Abel                     0.3                               0.3
    ...
    */


        
SELECT last_name, salary+salary*commission_pct, salary+salary*NVL(commission_pct, 0)
FROM employees;
    /*
    LASE_NAME       SALARY*COMMISSION_PCT    SALARY*NVL(COMMISSION_PCT, 0)
    ------------------------------------------------------------------------------------------------------------
    Matos                         ( null )                                         2600
    Vargas                        ( null )                                          2500
    Zlotkey                        12600                                       12600
    Abel                             14300                                        14300
    ...

        -- commission_pct가 0인 경우 모두 null 값이 반환됩니다.
        -- commission_pct가 0인 경우 salary 값만 출력하기 위해서는 commision_pct가 0이 되어야 합니다.
    */


 
        -- NVL2
SELECT last_name, salary+salary*NVL(commission_pct, 0), NVL2(commission_pct, '영업사원', '일반사원')
FROM employees;
    /*
    LAST_NAME       SALARY*NVL(...,0)        NVL2(..., '영업사원', '일반사원')
    -----------------------------------------------------------------------------------------------------------
    Matos                            2600                                                   일반사원
    Vargas                           2500                                                   일반사원
    Zlotkey                         12600                                                  영업사원
    Abel                             14300                                                   영업사원
    ...

        -- 커미션을 받는 경우 '영업사원'입니다.
        -- 커미션을 받지 않는 경우 '일반사원'입니다.
    */


    
    /*
    -- manager_id는 정수형이므로 문자열로 변환 후 진행해야 합니다.
SELECT last_name, NVL(manager_id, 'No Manager')
FROM employees;
    */
SELECT last_name, NVL(TO_CHAR(manager_id), 'No Manager')
FROM employees;
    /*
    LAST_NAME   NVL(TO_CHAR(MANAGER_ID, 'NOMANAGER')
    ---------------------------------------------------------------------------------------
    King                                        No Manager
    Kochhar                                 100
    De Haan                                 100
    Hunold                                    102
    ...

    */


        
        -- COALESCE
SELECT last_name, commission_pct, manager_id, COALESCE(commission_pct, manager_id, 1) 
FROM employees;
    /*
    LAST_NAME   COMMISSION_PCT    M_ID   COALESCE(..., MANAGER_ID, 1)
    ---------------------------------------------------------------------------------------------------
    King                        ( null )                   ( null )                1
    Kochhar                  ( null )                    100               100
    De Haan                 ( null )                    100               100
    Hunold                    ( null )                    102               102
    ...

            -- commission_pct와 manager_id 둘 다 null 인 경우 1을 출력합니다.
            -- commission_pct가 null 값이고 manager_id가 null 값이 아닌 경우 manager_id 값을 출력합니다.
    */


    
    

반응형