NULL, 빈 문자열, 공백, 그리고 숫자 0은 모두 '비어 있는' 것처럼 보일 수 있습니다. 하지만 SQL에서는 각각 다른 의미를 가지며, 처리 방식도 다릅니다. 이 차이를 정확히 이해하는 것이 매우 중요합니다.
0, '', ' ' 와는 완전히 다른 개념입니다.=, <>)로 비교할 수 없습니다. 반드시 IS NULL 또는 **IS NOT NULL**을 사용해야 합니다.NULL이 포함된 연산의 결과는 대부분 NULL이 됩니다.COUNT(*): NULL을 포함하여 모든 행을 셉니다.COUNT(컬럼): NULL을 제외하고 셉니다.0은 하나의 유효한 값입니다.=, <>)로 비교할 수 있습니다.WHERE col = 010 + 0 = 10COUNT(컬럼): 0은 NULL이 아니므로 카운트에 포함됩니다.'')=, <>)를 사용하여 비교할 수 있습니다.WHERE col = ''LENGTH('')의 결과는 0입니다.COUNT(컬럼): ''은 NULL이 아니므로 카운트에 포함됩니다.' ')'' (빈 문자열)과는 다르게, 공백이라는 문자가 1개 존재하는 것입니다.=, <>)로 비교 가능합니다.WHERE col = ' 'LENGTH(' ')의 결과는 1입니다.COUNT(컬럼): ' '은 NULL이 아니므로 카운트에 포함됩니다.| 구분 | NULL | 숫자 0 | 빈 문자열 ('') | 공백 (' ') |
|---|---|---|---|---|
| 정의 | 값이 없음 | '0'이라는 값 | 길이 0인 값 | 공백 1개 값 |
| 비교 연산 | IS NULL | = / <> | = / <> | = / <> |
LENGTH() | NULL | N/A | 0 | 1 |
COUNT(컬럼) | 제외 | 포함 | 포함 | 포함 |
NULL 여부 | NULL | NOT NULL | NOT NULL | NOT NULL |
값이 없다**는 개념은 NULLIS NULL**로만 비교할 수 있는 것은 **NULL**뿐COUNT(컬럼)**은 NULL만 제외하고, 나머지는 모두 카운트한다.0, '', ' '는 모두 NULL이 아니며, 값으로 취급된다.1. 다음 중 NULL에 대한 설명으로 가장 올바른 것은?
① 숫자 0과 동일한 개념이다.
② 빈 문자열('')과 동일한 개념이다.
③ 비교 연산자(=, \<>)로 다른 값과 비교할 수 있다.
④ 값이 존재하지 않는 미확정 상태를 의미한다.
2. USER 테이블의 age 컬럼에 NULL, 0, 20이 각각 1개씩 존재할 때, 다음 SQL의 결과는?
SELECT COUNT(age) FROM USER;
① 1
② 2
③ 3
④ NULL
3. 다음 중 user_name 컬럼에 빈 문자열('')을 가진 행을 찾기 위한 올바른 SQL 문은?
① SELECT * FROM User WHERE user_name IS NULL;
② SELECT * FROM User WHERE user_name = NULL;
③ SELECT * FROM User WHERE user_name = '';
④ SELECT * FROM User WHERE user_name IS NOT NULL;
4. USER 테이블의 email 컬럼에 NULL, ' '(공백), 'TEST' 가 각각 1개씩 존재할 때, 다음 SQL의 결과는?
SELECT COUNT(email) FROM USER;
① 1
② 2
③ 3
④ NULL
COUNT(컬럼)은 NULL을 제외하고 셉니다. 따라서 NULL을 제외한 0과 20 두 개의 값만 카운트되어 결과는 2가 됩니다.=를 사용하여 찾을 수 있습니다.COUNT(컬럼)은 NULL만 제외하고 카운트합니다. ' '(공백)은 유효한 값으로 간주되므로, ' '와 'TEST' 두 개가 카운트되어 결과는 2가 됩니다.