일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- SQL Grouping Functions
- SUM
- SQL내장함수
- SQL기본
- CASE중첩
- Where
- sql
- sqlp
- SQL문자형함수
- Simple Case Expression
- SQL숫자형 함수
- Britcent 3개월 완독 챌린지
- 데이터모델링
- 연관 서브 쿼리
- Aggregation Function
- SQL개발자
- Group Functions
- AVG
- nvl
- 다중 열 서브 쿼리
- Atomic Habit
- Window Functions
- 단일 행 서브 쿼리
- Cloud ERP
- sql전문가
- Searched Case Expression
- 3개월 완독 챌린지
- SQLD
- SQL연산자
- null
- Today
- Total
슴슴한 IT
[SQLD,SQLP]SQL기본 - NULL 함수 본문
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
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
'SQL' 카테고리의 다른 글
[SQLD,SQLP]SQL기본 - WHERE 비교연산자 (0) | 2023.08.04 |
---|---|
[SQLD,SQLP]SQL기본 - WHERE 절 - 연산자 (0) | 2023.08.02 |
[SQLD,SQLP]SQL기본 - CASE 함수 (0) | 2023.07.29 |
[SQLD,SQLP]SQL기본 - 날짜형 함수 (0) | 2023.07.25 |
[SQLD,SQLP]SQL기본 - 숫자형 함수 (0) | 2023.07.23 |