슴슴한 IT

[SQLD,SQLP]SQL기본 - NULL 함수 본문

SQL

[SQLD,SQLP]SQL기본 - NULL 함수

요한바울 2023. 8. 1. 23:42
728x90

NULL이란?

  • NULL은 데이터베이스에서 값이 존재하지 않음 또는 아직 정의되지 않은 값을 의미
  • 0은 숫자이고, 공백은 하나의 문자이므로 0과 공백과는 다른  값임
  • 정의되지 않은 값 NULL은 비교나 연산이 불가하며, 연산이나 비교 값은 항상 NULL임
  • 일반적으로 해당 필드 타입이 숫자인 경우 0으로, 문자인 경우 해당 시스템에서 정한 무의미한 값으로 대체함

NULL 연산 결과 

A B C(A+B)
10 20 30
15 NULL NULL
NULL 25 NULL
NULL NULL NULL
  • 첫 번째 행은 A와 B 값 컬럼 값이 존재하므로C 컬럼에는 정상적인 계산결과인 30이 저장됨
  • 두 번째, 세 번째행은 A 컬럼 또는 B컬럼이 NULL이고, NULL의 연산결과는 NULL이므로 C컬럼 값은 NULL임
  • 네 번째 행은 두 컬럼 모두 NULL이므로 연산 결과도 NULL임 

예시와 같이 NULL 값을 포함하는 경우, 많은 실수가 발생하므로 주의가 필요하며, NULL 값을 처리하기 위해 NULL 관련 함수 COALESCE, NULLIF, NVL, ISNULL 등 NULL 처리 함수를 사용하여 원하는 결과를 얻을 수 있음

 

NULL 관련 함수

NVL함수 : NVL( NULL 판단 대상, NULL일 때 대체 값 )

Oracle에서 사용하는 함수이며, NVL 함수는 두 개의 인자를 받고, 첫 번째 인자가 NULL이면 두 번째 인자 값을 반환

<students> 테이블에서 id, name, 수학점수를 조회하는 SQL이며, 수학점수가 NULL인 경우 'N/A'로 처리

SELECT
    student_id,
    student_name,
    NVL(math_score, 'N/A') AS math_score
FROM students;

데이터

student_id stduent_name math_score
101 John 85
102 Alice NULL
103 Michael 78
104 Emily NULL

조회결과

students
-------------------------------------
student_id  | student_name | math_score
-------------------------------------
101         | John         | 85
102         | Alice        | N/A
103         | Michael      | 78
104         | Emily        | N/A

ISNULL 함수 : ISNULL ( NULL 판단 대상, NULL일 때 대체 값 )

SQL Server에서 사용하는 함수이며, 두 개의 인자를 받고, 첫 번째 인자가 NULL이면 두 번째 인자 값을 반환

<students> 테이블에서 id, name, 수학점수를 조회하는 SQL이며, 수학점수가 NULL인 경우 'N/A'로 처리

SELECT
    student_id,
    student_name,
    NVL(math_score, 'N/A') AS math_score
FROM students;

데이터

student_id stduent_name math_score
101 John 85
102 Alice NULL
103 Michael 78
104 Emily NULL

조회결과

students
-------------------------------------
student_id  | student_name | math_score
-------------------------------------
101         | John         | 85
102         | Alice        | N/A
103         | Michael      | 78
104         | Emily        | N/A

NULLIF 함수 : NULLIF (  expr1, expr2 )

NULLIF 함수는 expr1, expr2 값이 같을 경우 NULL, 같지 않을 경우 expr1을 반환한다. 

<students> 테이블에서 id, name, 수학점수, 과학점수를 조회하는 SQL이며, 수학 성적과 과학 성적이 동일할 경우, NULL값을 반환

SELECT
    student_id,
    student_name,
    math_score,
    science_score,
    NULLIF(math_score, science_score) AS result
FROM students;

데이터

student_id student_name math_score science_score
101 John 85 85
102 Alice 90 NULL
103 Michael 78 80
104 Emily NULL NULL

조회결과

students
-------------------------------------------------------------------
student_id  | student_name | math_score | science_score | result
-------------------------------------------------------------------
101         | John         | 85         | 85            | NULL
102         | Alice        | 90         | NULL          | 90
103         | Michael      | 78         | 80            | 78
104         | Emily        | NULL       | NULL          | NULL

COALESCE 함수 : COALESCE (  expr1, expr2, ... )

COALESCE 함수는 인수의 숫자가 한정돼 있지 않으며, 인수 중 NULL이 아닌 첫 번째 값을 반환

NULL이 아닌 값이 없으면 NULL을 반환

학생들의 수학 성적과 과학 성적이 저장된 "students" 테이블이 있고, 학생들의 성적이 NULL인 경우 기본 값을 0으로 대체

SELECT
    student_id,
    student_name,
    COALESCE(math_score, 0) AS math_score,
    COALESCE(science_score, 0) AS science_score
FROM students;

데이터

student_id student_name math_score science_score
101 John 85 85
102 Alice 90 NULL
103 Michael 78 80
104 Emily NULL NULL

조회결과

students
---------------------------------------------------------
student_id  | student_name | math_score | science_score 
---------------------------------------------------------
101         | John         | 85         | 85          
102         | Alice        | 90         | 0         
103         | Michael      | 78         | 80        
104         | Emily        | 0          | 0

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

728x90