Web Frontend/Database

[SQL] NULL 데이터 처리(ISNULL, NULLIF, NVL, COALESCE)

코라채 2025. 3. 5. 12:52
728x90
반응형

데이터베이스를 설계하고 운영할 때, 모든 데이터가 항상 값으로 채워지는 것은 아닙니다. 예를 들어, 회원 테이블에서 사용자의 주소나 전화번호가 아직 입력되지 않은 경우, 해당 필드는 NULL 값으로 저장됩니다. 이처럼 NULL은 “데이터가 존재하지 않음”을 나타내며, 데이터의 누락이나 아직 입력되지 않은 상태를 표현하는 중요한 개념입니다. SQL 자격증을 준비하는 여러분에게 NULL의 특성과 이를 적절하게 처리하는 방법은 매우 중요한 주제입니다.

1. NULL 특징

  • NULL은 값이 존재하지 않음을 의미하며, 이는 0이나 빈 문자열과는 다릅니다.
  • 연산 시 주의점 - NULL과의 연산은 결과가 NULL이 될 가능성이 크므로, 이를 처리하지 않으면 의도치 않은 결과를 가져올 수 있습니다.

2. NULL 데이터 처리 함수

NULL 데이터 처리 함수는 ISNULL, NULLIF, NVL, COALESCE가 있습니다.

ISNULL

  • SQL Server에서는 ISNULL 함수를 사용해 NULL 값을 다른 값으로 대체할 수 있습니다.
  • Oracle SQL에서는? Oracle에서는 직접적인 ISNULL 함수는 없으나, 같은 기능은 NVL 함수를 통해 구현할 수 있습니다.
  • SQL Server일 경우
    SELECT ISNULL(컬럼명, '기본값') FROM 테이블명;
    

NULLIF

  • 두 값이 동일하면 NULL을 반환하고, 그렇지 않으면 첫 번째 값을 반환하는 함수입니다.
    SELECT NULLIF('ABC', 'ABC') AS 결과 FROM dual;  -- 결과는 NULL
    SELECT NULLIF('ABC', 'XYZ') AS 결과 FROM dual;  -- 결과는 'ABC'
    
  • 특정 조건 하에 값을 NULL로 만들고, 이를 다른 함수와 조합하여 처리할 수 있습니다.

NVL

  • Oracle SQL에서 널(null) 값을 지정한 다른 값으로 대체할 때 사용합니다.
    SELECT NVL(컬럼명, '기본값') AS 결과 FROM 테이블명;
    
  • 첫 번째 인자가 NULL이면 두 번째 인자를 반환하며, NULL이 아닐 경우 원래 값을 반환합니다.

COALESCE

  • 여러 인자 중에서 처음으로 NULL이 아닌 값을 반환하는 함수입니다.
    SELECT COALESCE(컬럼1, 컬럼2, '기본값') AS 결과 FROM 테이블명;
    
  • 여러 컬럼 중 값이 존재하는 첫 번째 컬럼을 선택할 때 유용합니다.
  • 만약 COALESCE(컬럼1, 값) 형태로 쓰인다면 컬럼1에 값이 NULL인 부분을 값으로 변경합니다.
SELECT 회원ID,
       COALESCE(나이, 100) AS 나이_값
FROM 회원정보;

 

  • 위와 같이 회원 정보 테이블에서 나이를 조회한다고 가정해보겠습니다.
  • 만약 어떤 회원의 나이 컬럼 값이 NULL이면, 나이_값에는 100이 표시됩니다.
  • 나이 값이 30인 경우에는 그대로 30이 표시됩니다.

 

 

3. SELECT 절에서의 표현식 사용 및 문자별 데이터 처리 예시

Oracle SQL에서는 SELECT 절 내에서 위의 함수를 사용해 데이터 처리 및 변환을 쉽게 할 수 있습니다. 예를 들어, 회원 정보 테이블에서 이메일 컬럼이 NULL인 경우 '이메일 미등록'으로 대체하여 출력하고 싶다면 다음과 같이 작성할 수 있습니다.

SELECT 
    회원ID,
    NVL(이메일, '이메일 미등록') AS 이메일_상태,
    COALESCE(휴대전화, 집전화, '연락처 미등록') AS 연락처_상태,
    NULLIF(상태, '정상') AS 상태_변환
FROM 회원정보;
  • NVL 활용: 이메일 컬럼이 NULL이면 '이메일 미등록'으로 대체합니다.
  • COALESCE 활용: 휴대전화와 집전화 중 NULL이 아닌 첫 번째 값을 선택하여 연락처를 출력합
  • GROUP BY 절: 그룹화를 할 때도 NVL이나 COALESCE를 활용해 NULL 값이 포함된 데이터를 특정 그룹으로 묶을 수 있습니다.
SELECT NVL(컬럼명, '기본그룹') AS 그룹명, COUNT(*) FROM 테이블명 GROUP BY NVL(컬럼명, '기본그룹');
  • NULLIF 활용: 상태가 '정상'인 경우 NULL로 처리하여, 특정 로직이나 조건문에서 구분할 수 있습니다.

또한 문자별 데이터 처리 시, NVL과 COALESCE를 사용해 문자 데이터를 포맷하거나 기본 값을 지정할 수 있으므로, 데이터가 누락된 경우에도 일관된 형식을 유지할 수 있습니다.

4. SELECT절 말고 다른 절에서도 활용하기

WHERE 절

  •  조건식을 구성할 때 NULL을 처리하여 원하는 조건에 맞게 데이터를 필터링할 수 있습니다.
SELECT * FROM 테이블명 WHERE NVL(컬럼명, '기본값') = '특정값';

ORDER BY 절

  • 정렬 시 NULL 값을 다른 값으로 대체하여 원하는 순서대로 정렬할 수 있습니다.
SELECT 컬럼명 FROM 테이블명 ORDER BY NVL(컬럼명, '기본값');

 

GROUP BY 절

  • 그룹화를 할 때도 NVL이나 COALESCE를 활용해 NULL 값이 포함된 데이터를 특정 그룹으로 묶을 수 있습니다.
SELECT NVL(컬럼명, '기본그룹') AS 그룹명, COUNT(*) FROM 테이블명 GROUP BY NVL(컬럼명, '기본그룹');

마무리

ISNULL, NULLIF, NVL, COALESCE와 같은 함수들은 데이터의 누락 문제를 처리하고, 보다 안정적인 조건문이나 정렬, 그룹화를 구현하는 데 도움을 줍니다. SQL에서 함수를 다룰때는 해당 데이터의 특성과 함수의 동작을 잘 이해하고 적절한 위치에서 사용하는 것이 중요합니다.

  • NULL - 데이터가 존재하지 않음을 의미하며, 0이나 빈 문자열과 다르다는 점
  • ISNULL, NULLIF, NVL, COALESCE - 각각의 함수가 NULL 데이터를 어떻게 처리하며, SELECT 절 등에서 어떻게 활용되는지 예시를 통해 설명했습니다.
  • 문자 데이터를 비롯한 다양한 데이터 형식에 대해 NULL 처리 함수를 적절하게 사용하면, SQL 자격증 시험 준비뿐 아니라 실제 업무에서도 데이터의 신뢰성을 높일 수 있습니다.

이와 같은 함수들을 정확히 이해하고 활용한다면, Oracle SQL을 보다 효율적으로 다루며 데이터의 완전성을 유지할 수 있습니다.

728x90
반응형