SQL

[이론]SQL 심화 문법 정리 : NULL 함수

노력하는 백곰 2024. 12. 4. 08:25

■ NULL 함수

- DBMS 내 데이터를 가공하여 구축할 때 NULL 값을 효율적으로 처리하는 함수

  (단, DBMS별로 지원하는 함수가 상이하므로 본 페이지에서는 MySQL, Oracle에서 사용 가능한 함수만을 정리)

 

 

□ 공통

COALESCL(A, B, C, ...)

- A가 NULL 값이면 B, B 또한 NULL 값이면 C... 패턴으로 반환

SELECT 
    COALESCE('A', 'B', 'C', 'D') AS RESULT1,       # 결과: A
    COALESCE(NULL, 'B', 'C', 'D') AS RESULT2,      # 결과: B 
    COALESCE(NULL, NULL, 'C', 'D') AS RESULT3,     # 결과: C
    COALESCE(NULL, NULL, NULL, 'D') AS RESULT4,    # 결과: D
    COALESCE(NULL, NULL, NULL, NULL) AS RESULT5    # 결과: NULL
FROM 
    PAYMENT

 

 

 MySQL

IFNULL(A, B)

- A가 NULL 값일 경우, B로 대체하여 반환

SELECT
    IFNULL(NAME, '확인불가') AS NAME,      #NAME 컬럼이 NULL 값이면 '확인불가' 반환 / 아니면 유지
    IFNULL(AGE, '확인불가') AS AGE,
    IFNULL(DATE, '확인불가') AS DATE
FROM 
    PAYMENT

 

 

IF(NOT NULL(A), B, C)

- A가 NULL 값이 True인 경우, B를 반환하고 False인 경우, C를 반환

SELECT
    #NAME 컬럼이 NULL이면 '확인불가' / 아니며 유지
    IF(IS NULL(NAME), '확인불가', NAME) AS NAME  
FROM 
    PAYMENT

 

 

 Oracle

NVL(A, B)

- A가 NULL 값일 경우, B로 대체하여 반환

SELECT
    NVL(NAME, '확인불가') AS NAME,       #NAME 컬럼이 NULL 값이면 '확인불가' 반환 / 아니면 유지
    NVL(AGE, '확인불가') AS AGE,
    NVL(DATE, '확인불가') AS DATE
FROM 
    PAYMENT

 

 

NVL2(A, B, C)

- A가 NULL 값이 아니면 B로 반환하고, NULL 값이면 C로 반환

SELECT
    NVL2(NAME, NAME, '확인불가') AS NAME,    #NAME 컬럼이 NULL 값이 아니면 유지 / 맞으면 '확인불가' 조회
    NVL2(AGE, AGE, '확인불가') AS AGE,     
    NVL2(DATE, DATE, '확인불가') AS DATE    
FROM 
    PAYMENT

 

 

NULLIF(A, B)

- A와 B가 같으면 NULL 값으로 반환

SELECT 
    NULLIF('Hello', 'Hello') AS RESULT1,                              # 결과: NULL
    NULLIF('Oracle' 'Hello') AS RESULT2,                              # 결과: Oracle
    NULLIF(1234, 1234) AS RESULT3,                                    # 결과: NULL
    NULLIF(1234, 5678) AS RESULT4,                                    # 결과: 1234 
    NULLIF(SYSDATE, SYSDATE) AS RESULT5,                              # 결과: NULL
    NULLIF(TO_DATE('2024-11-17', 'YYYY-MM-DD'), SYSDATE) AS RESULT6   # 결과: 2024-11-17 00:00:00
FROM 
    PAYMENT