NULL 처리 함수

NULL 처리 함수
NVL, NVL2, NULLIF 등이 제공됨

1. IS NULL, IS NOT NULL
 - NULL값은 '='연산자로 동등성 평가가 불가능
 - NULL의 평가를 위한 연산자로 IS, IS NOT 연산자가 제공
 사용예) 상품테이블에서 상품의 색상(PROD_COLOR)이 NULL인 제품의 제품코드, 제품명, 매입단가를 조회하시오.
    SELECT PROD_ID AS 제품코드,

                   PROD_NAME AS 제품명, 
                   PROD_COST AS 매입단가
       FROM PROD
    WHERE PROD_COLOR IS NULL;  -- '='연산자 사용불가

2. NVL(expr, val)
 - 'expr' 값이 NULL이면 'val'를 반환하고 NULL이 아니면 'expr'값을 반환
 - 'expr'과 'val'은 같은 데이터 타입이어야 함

 사용예) 2020년 7월 모든 회원별 구매현황을 조회하시오. -- '모든' ≫ OUTER JOIN사용 / 'OO별' ≫ GROUP BY사용
              Alias 회원번호, 회원명, 구매 수량 합계
     SELECT B.MEM_ID AS 회원번호, 
                    B.MEM_NAME AS 회원명, 
                    NVL(SUM(A.CART_QTY),0) AS 구매수량합계
        FROM CART A
        RIGHT OUTER JOIN MEMBER B ON(A.CART_MEMBER=B.MEM_ID AND A.CART_NO LIKE '202007%')
      GROUP BY B.MEM_ID, B.MEM_NAME
      ORDER BY 1;

 사용예) 2020년 7월 모든 회원별 구매현황을 조회하시오.
              Alias 회원번호, 회원명, 구매 수량 합계이며 구매 수량이 없으면 '구매정보 없음'을 출력  
     SELECT B.MEM_ID AS 회원번호, 
                    B.MEM_NAME AS 회원명, 
                    NVL(TO_CHAR(SUM(A.CART_QTY), '9,999,999'), '구매정보 없음') AS 구매 수량 합계
                    (NVL(SUM(A.CART_QTY), '구매정보 없음') AS 구매 수량 합계) / 'expr'과 'val'은 같은 데이터 타입이어야 함
        FROM CART A
       RIGHT OUTER JOIN MEMBER B ON(A.CART_MEMBER=B.MEM_ID AND A.CART_NO LIKE '202007%')
      GROUP BY B.MEM_ID, B.MEM_NAME
      ORDER BY 1;

3. NVL2(expr, v1, v2)
 - 'expr' 값이 NULL이면 'v2'를 반환하고 NULL이 아니면 'v1'값을 반환
 - NVL을 확장한 개념(NVL을 NVL2로 변환 가능)
 - v1과 v2는 같은 데이터 타입이어야 함
 사용예) 상품 테이블에서 제품의 제품 코드, 제품명, 매입단가, 색상을 조회하시오.
              색상이 NULL이며 '색상 정보 없음'을 출력하시오. NVL2와 NVL을 적용
 (NVL사용)
     SELECT PROD_ID AS 제품 코드, 
                    PROD_NAME AS 제품명, 
                    PROD_COST AS 매입단가, 
                    NVL(PROD_COLOR,'색상정보 없음') AS 색상
        FROM PROD;
 (NVL2사용)
    SELECT PROD_ID AS 제품 코드, 
                    PROD_NAME AS 제품명, 
                    PROD_COST AS 매입단가, 
                    NVL2(PROD_COLOR,PROD_COLOR,'색상정보 없음') AS 색상
        FROM PROD;

 사용예) 사원 테이블에서 사원들의 보너스를 계산하시오.
         보너스는 영업실적이 있으면 기본급여(SALARY)*영업실적이고,
         영업실적이 없으면 기본급여(SALARY)*10%이다.
         영업실적이 없으면 영업실적에 '실적 없음'을 출력할 것
         Alias 사원번호, 사원명, 영업실적, 기본급, 보너스
     SELECT EMPLOYEE_ID AS 사원번호, 
                    EMP_NAME AS 사원명, 
                    NVL(TO_CHAR(COMMISSION_PCT),'실적없음') AS 영업실적,
                    SALARY AS 기본급,
                    NVL2(COMMISSION_PCT,(SALARY * COMMISSION_PCT), (SALARY*0.1)) AS 보너스
        FROM HR.EMPLOYEES;

      
4. NULLIF(col1, col2)
 - 'col1'과 'col2'를 비교하여 서로 같은 값이면 NULL을 반환하고 다른 값이면 'col1'을 반환함
 **
 사용예) 상품 테이블에서 분류코드 'P301'자료의 매출가격을 매입가격으로 조정하시오.
     UPDATE PROD
            SET PROD_PRICE=PROD_COST
     WHERE PROD_LGU='P301';

 사용예) 상품테이블에서 상품들의 매입가와 매출가를 조회하여 같은 값이면 비고란에 '단종 예정 상품'을,
              서로 다른 가격이면 판매이익을 조회하시오.
              Alias 상품코드, 상품명, 매입 가격, 매출 가격, 비고
     SELECT PROD_ID AS 상품코드, 
                    PROD_NAME AS 상품명, 
                    PROD_COST AS 매입가격, 
                    PROD_PRICE AS 매출가격, 
                    NVL2NVL2(NULLIF(PROD_COST, PROD_PRICE), TO_CHAR(PROD_PRICE-PROD_COST, '9,999,999'),

                                                                                                                                              '단종 예정 상품') AS 비고
       FROM PROD;

 

 

 

 

 

2022.11.23 ~ 2022.11.24 Oracle SQL 수업

+ Recent posts