NULL, 빈 문자열, 공백, 그리고 숫자 0은 모두 '비어 있는' 것처럼 보일 수 있습니다. 하지만 SQL에서는 각각 다른 의미를 가지며, 처리 방식도 다릅니다. 이 차이를 정확히 이해하는 것이 매우 중요합니다.
0
, ''
, ' '
와는 완전히 다른 개념입니다.=
, <>
)로 비교할 수 없습니다. 반드시 IS NULL
또는 **IS NOT NULL
**을 사용해야 합니다.NULL
이 포함된 연산의 결과는 대부분 NULL
이 됩니다.COUNT(*)
: NULL
을 포함하여 모든 행을 셉니다.COUNT(컬럼)
: NULL
을 제외하고 셉니다.0
은 하나의 유효한 값입니다.=
, <>
)로 비교할 수 있습니다.WHERE col = 0
10 + 0 = 10
COUNT(컬럼)
: 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 |
값이 없다
**는 개념은 NULL
IS 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가 됩니다.