
SQLD 학습을 하며 NULL에 대해 헷갈리는 부분이 많아 한 곳에 기록합니다.
ANSI 표준 기준 NULL을 찾아내는 경우는 IS NULL, IS NOT NULL이다.
ORACLE INSERT INTO 서비스 VALUES('999', '', '2015-11-11');를 입력했을 경우 서비스명 칼럼에 공백이 아닌 NULL이 입력된다.
ORACLE에서는 위의 데이터를 조회하려면 IS NULL 조건을 걸어줘서 조회해야한다.IS NULL 사용SQL Server에서는 위위의 데이터를 조회하려면 IS NULL로 해도 조회되지 않는다.'' 불가능ORACLE NULL을 최대값으로 취급
SQL Server에서는 NULL을 최소값으로 취급
SQL Server는 NULL 값을 인덱스 맨 앞에 저장하고, Oracle은 맨 뒤에 저장한다.
NULLIF(표현식1, 표현식2)
표현식 1과 2가 같으면 NULL을, 같지 않으면 표현식1을 리턴한다.
NVL/ISNULL(표현식1, 표현식2)
표현식1 NULL이면 표현식2를 리턴한다.
NVL(표현식1, 0)
표현식1이 NULL이면 0으로 표시, NULL이 아니면 그대로 표현식1로 표시
NVL2("값", "지정값1", "지정값2") // NVL2("값", "NOT NULL", "NULL")
함수는 NULL이 아닌 경우 지정값1을 출력하고, NULL인 경우 지정값2를 출력한다.
NULLIF('A', 'A') : NULL 반환
NULLIF('A', 'B') : A 반환
두 인자값이 같으면 NULL 반환, 다르면 첫번째 인자값 반환
COALESCE(콜럼1, 콜럼2, ...)
적은 콜럼 중 NULL이 아닌 첫 값을 호출
콜럼1이 'A', 콜럼2가 NULL이면 'A'
콜럼1이 NULL, 콜럼2가 'B'면 'B'
콜럼1이 'A', 콜럼2가 'B'면 'A'
GROUP BY절은 NULL이 있을 경우 NULL 데이터도 집계에 포함한다.

| COL1 | COL2 | COL3 |
|---|---|---|
| 100 | NULL | 100 |
| NULL | 200 | 400 |
| 0 | 300 | NULL |
SELECT SUM(COL2) + SUM(COL3) FROM TAB1;
SELECT SUM(COL2) + SUM(COL3) FROM TAB1 WHERE COL1 > 0;
SELECT SUM(COL2) + SUM(COL3) FROM TAB1 WHERE COL1 IS NOT NULL;
SELECT SUM(COL2) + SUM(COL3) FROM TAB1 WHERE COL1 IS NULL;
정답: 1000, NULL, 400, 600
두번째 SQL문에서 COL1이 0보다 큰 것에 대해서
100 NULL 100 레코드를 연산한다.
SUM(COL2)는 NULL을 리턴한다. SUM(COL3)은 100을 리턴한다.
NULL + 100 = NULL
NULL로만 구성된 컬럼을 COUNT하면 공집합이 아니라 0이 나온다.
SELECT SUM(column_name)
FROM table_name
WHERE condition;
SUM 함수는 NULL 값을 제외하고 합산을 수행하며, NULL 값만 있는 경우에도 0을 반환한다.