본문 바로가기
DB/SQL(오라클)

오라클(SQL)NULL 처리함수(IS[NOT] NULL, NVL(c,val), NVL2(C, VALL, VAL2))

by redbear0077 2021. 3. 15.
반응형

NULL 처리함수(IS[NOT] NULL, NVL(c,val), NVL2(C, VALL, VAL2))

1) IS[NOT] NULL
    - 특정 컬럼의 값이 NULL인지 판단
    - NULL은 '='기호로 판단될 수 없음
    (사용 형식)
    컬럼명 IS [NOT] NULL
    

사용 예) 사원테이블에서 영업실적코드(COMMISION_PCT)가  NULL이 아닌 사원정보를 조회하시오 

SELECT A.EMPLOYEE_ID AS 사원번호,
           A.EMP_NAME AS 사원명,
           B.DEPARTMENT_NAME AS 부서명,
           A.COMMISSION_PCT AS 영업실적,
           A.SALARY AS 급여
        FROM EMPLOYEES A, DEPARTMENTS B
    WHERE A.DEPARTMENT_ID =B.DEPARTMENT_ID
        AND A.COMMISSION_PCT IS NOT NULL;

2) NVL(c,val)

    - NULL 처리 함수 중 가장 널리 사용
    - c 컬럼에 값이 NULL이면 val값을 반환하고, NULL이 아니면 자신의 값을 반환
    - 주로 연산식에 사용됨
    - c와 val의 데이터 타입이 같아야 한다
    
    사용 예) 사원테이블에서 영업실적에 따른 보너스를 계산하고 이번달 지급액을 조회하시오 
            보너스 = 급여 * 영업실적
            지급액 = 급여 + 보너스 
            Alias는 사원번호,이름,부서명,본봉,영업실적,보너스,지급액이다

    SELECT A.EMPLOYEE_ID AS 사원번호,
           A.EMP_NAME AS 이름,
           B.DEPARTMENT_NAME AS 부서명,
           A.SALARY AS 본봉,
--           NVL(TO_CHAR(A.COMMISSION_PCT,'0.00'),'없음') AS 영업실적,
--           TO_CHAR(NVL(A.COMMISSION_PCT,0.0),'0.00') AS 영업실적,
           NVL(TO_CHAR(A.COMMISSION_PCT,'0.00'),'없음') AS 영업실적,
           NVL(ROUND(A.SALARY*A.COMMISSION_PCT,1),0) AS 보너스,
           A.SALARY+NVL( ROUND(A.SALARY*A.COMMISSION_PCT,1),0) AS 지급액
        FROM EMPLOYEES A, DEPARTMENTS B
    WHERE A.DEPARTMENT_ID= B.DEPARTMENT_ID;
    --연산에 NULL이 들어갈 수 있는 경우 테이블 생성할 때 컬럼지정에 DEFAULT 0을 지정해주면 됨 컬럼 제약사항 설정 
   

3)NVL2(C, VALL, VAL2)
    -C의 값이 NULL이 아니면 VALL을 NULL이면 VAL2를 각각 반환
    -VALL과 VAL2는 갗은 데이터 타입이어야함
테이블 변경

UPDATE  MEMBER
SET     MEM_HP=NULL
WHERE   MEM_ID IN('d001','f001','r001','p001','s001');

COMMIT;

사용예) 회원테이블에서 회원들의 핸드폰번호를 조회하시오
    핸드폰 번호가 없으면 '연락처 없음'을 출력하시오(NVL2사용)
    ALIAS는 회원번호, 회원명, 연락처

SELECT  MEM_ID AS 회원번호,
        MEM_NAME AS 회원명,
        NVL2(MEM_HP,MEM_HP,'연락처 없음') AS 연락처
FROM    MEMBER;

UPDATE  MEMBER
SET     MEM_MILEAGE=NULL
WHERE   MEM_ID IN('d001','f001','r001','p001','s001');

사용예) 회원테이블에서 회원의 마일리지를 검사하여 NULL이 아니면 
        '정상회원' NULL이면, '비활동 회원'을 비고난에 출력하시오
        ALIAS는 회원번호, 회원명, 직업, 마일리지, 비고

SELECT  MEM_ID  AS 회원번호, 
        MEM_NAME AS 회원명, 
        MEM_JOB AS 직업, 
        MEM_MILEAGE AS 마일리지, 
        NVL2(MEM_MILEAGE,'정상회원','비활동 회원') AS 비고
FROM    MEMBER;

 

반응형