이번 2024년도 SQLD에 추가된 NULL 속성의 이해.
이전 기출에도 끼워넣기로 문제가 출제는 되었지만 해당 파트는 시험범위에 공지가
안되어 있었다. 하지만 2024 SQLD에 오면서 NULL 속성의 이해 파트가 추가됨에 따라
문제가 빈번히 출제된다 믿어 의심치 않아 총 정리를 하려한다.
NULL이란?
- NULL은 아직 정의 되지 않은 미지의 값. 0은 숫자이고, 공백은 문자이다.(다르다는 뜻)
- NULL과 숫자를 비교할 시 UNKNOWN
- NULL값을 비교연산시 FALSE
- 집계함수 사용시 NULL은 계산에서 제외된다.
그럼 NULL은 어떻게 비교를 하는가?
NVL(A, B) / ISNULL(A, B) *ORACLE / *SQL SERVER
A 값이 NULL이면 B를 출력, A값이 NULL이 아니면 A를 출력.
NULLIF(A, B)
A = B 일때 NULL, A != B 이면 A 리턴
COALESCE(A, B, …)
모든 표현식이 NULL 이라면 NULL을 리턴하지만
A부터 순서대로 보았을 때 NULL이 아닌값이 나온다면 최초의 NULL이 아닌값을 리턴.
추가 참고사항
INSERT INTO SERVICE VALUES('999', '', '2015-11-11');
하면 오라클에서는 ‘‘은 NULL로 들어가지만,
SQL SERVER에서는 ‘‘은 NULL이 아닌 빈값으로 들어간다.
조회시
ORACLE => A IS NULL; SQL SERVER => A = ‘’;
// ‘ ‘와 같이 공백값은 공백으로 들어감 둘다.
NULL 문제 틀린것
COL1 | COL2 |
---|---|
Y | 20 |
X | 30 |
A | 40 |
A | 50 |
10 | |
80 |
SELECT SUM(COL2)
FROM T1
WHERE COL1 IN ('A','X',NULL);
여기서 NULL은 포함 되지않는다.
고로 답은 (X,30),(A,40),(A,50)인 30 + 40 + 50 = 120이다.