반응형
SQL를 다루는 입장에서 가장 중요한 부분이 NULL 값에 대한 처리입니다.
NULL 값이 포함되면 집계 함수(SUM, AVG)나 EXISTS 구문 등 동일한 SQL인데도 값이 다르게 리턴됩니다.
이번 문제는 NULL 값을 치환할 수 있는 함수에 대해서 풀어보겠습니다.
문제
아래 SQL의 결과값이 다른 것은?
[TABLE_A]
COL1 | COL2 |
10 | 0 |
10 | 20 |
NULL | 10 |
10 | 10 |
[예문]
SELECT NVL( COL1, COL2 ) AS EX1
, NVL2( COL1, COL1, COL2 ) AS EX2
, NULLIF( COL1, COL2 ) AS EX3
, COALESCE( COL1, COL2 ) AS EX4
FROM TABLE_A
1. EX1
2. EX2
3. EX3
4. EX4
문제풀이
- 각 함수의 사용 방법을 알아야 합니다.
NVL, NVL2, COALESCE
- NULL 값을 다른 값으로 변경
- NVL( expr1, expr2 ) : expr1 값이 null 일 경우 expr2 값으로 변경, null이 아니면 expr1 값 리턴
- NVL2( expr, expr1, expr2 ) : expr이 null이 아닐 경우 expr1, null일 경우 expr2 리턴
- COALESCE( expr1, expr2, expr3 ) : expr1이 null이 아니면 expr1 값 리턴, null이면 coalesce(expr2, expr3) 리턴
COL1 COL2
10 0
10 20
NULL 10
10 10
SELECT NVL( COL1, COL2 ) AS EX1
, NVL2( COL1, COL1, COL2 ) AS EX2
, COALESCE( COL1, COL2 ) AS EX4
1,2,4번은 COL1이 NULL이 아니므로, COL1을 리턴
3번은 COL1이 NULL이므로 COL2를 리턴
결과는
10
10
10
10
NULLIF
- NULLIF( expr1, expr2 ) : exp1값과 exp2값이 동일하면 null 아니면 exp1를 리턴
COL1 COL2
10 0
10 20
NULL 10
10 10
SELECT NULLIF( COL1, COL2 ) AS EX3
FROM TABLE_A
1, 2, 3번은 COL1과 COL2값이 달라서 COL1 리턴
3번은 값이 같아서 NULL 리턴
결과는
10
10
NULL
NULL
오늘은 NULL체크하는 방식에 대해서 알아봤습니다~
추가적인 궁금증은 댓글로 달아주세요!! :)
반응형
'SQL' 카테고리의 다른 글
SQL 강의 SQLP SQLD 기출 문제 - 009 ( UNION ALL ) (0) | 2022.10.13 |
---|---|
SQL 강의 SQLP SQLD 기출 문제 - 008 ( COUNT 집계 함수 ) (0) | 2022.10.12 |
SQL 강의 SQLP SQLD 기출 문제 - 006 ( ORACLE AUTO COMMIT ) (0) | 2022.10.10 |
SQL 강의 SQLP SQLD 기출 문제 - 005 / 데이터 타입, 묵시적 형변환 (0) | 2022.10.08 |
SQL 강의 SQLP SQLD 기출 문제 - 004 / 다중 IN 조건 이해 (0) | 2022.10.07 |
댓글