Article

SQL에서 NULL과 빈 문자열 구분하기

도입

empty 이미지

SQL을 다루다 보면 자주 마주치는 혼동이 있습니다. NULL과 빈 문자열(empty string)의 차이입니다. 데이터베이스에서는 이 두 값이 완전히 다르게 저장되고 처리되지만, 쿼리를 작성할 때 실수하기 쉽습니다.

NULL vs 빈 문자열의 차이

데이터베이스에서:

  • NULL: 값이 없음을 나타내는 특수한 표식. 데이터가 입력되지 않았거나 알 수 없는 상태입니다.
  • 빈 문자열 (""): 값은 있지만 내용이 없다는 뜻. 명시적으로 아무것도 입력하지 않은 경우입니다.

예를 들어 사용자 테이블에서:

  • phone 컬럼이 NULL = 전화번호를 등록하지 않음
  • phone 컬럼이 "" = 전화번호 입력 필드에 엔터를 쳤지만 값은 없음

SQL 쿼리로 구분하기

빈 문자열 데이터 조회

SELECT * FROM users WHERE phone = '';

NULL 데이터 조회

SELECT * FROM users WHERE phone IS NULL;

SQL에는 IS EMPTY 문법이 없습니다. 빈 문자열은 일반적인 문자열 비교 연산자(=)를 사용하면 됩니다.

실무에서 자주 사용하는 패턴

1. NULL과 빈 문자열 모두 제외

유효한 데이터만 조회하려면:

SELECT * FROM users 
WHERE phone IS NOT NULL 
AND phone != '';

2. NULL이거나 빈 문자열인 경우 모두 조회

무언가 입력된 값만 필요한 경우의 반대:

SELECT * FROM users 
WHERE phone IS NULL 
OR phone = '';

3. 빈 문자열을 NULL로 변환

데이터 정제 시 빈 문자열을 NULL로 통일하려면:

UPDATE users 
SET phone = NULL 
WHERE phone = '';

프로그래밍 언어에서의 혼동

프로그래밍 언어와 SQL의 NULL 개념이 다를 수 있습니다:

언어NULL빈 문자열
PHPnull"" 또는 ''
PythonNone""
JavaScriptnull / undefined""
SQLNULL'' 또는 ""

데이터베이스에서 NULL을 조회할 때는 == null이 아니라 IS NULL을 사용해야 합니다.

마치며

NULL과 빈 문자열은 데이터 정제와 검증에서 매우 중요한 개념입니다. 특히 사용자 입력 데이터를 다룰 때 이 둘을 구분하지 못하면 버그가 발생할 수 있습니다. 데이터베이스 설계 단계에서부터 NULL 허용 여부를 명확히 하고, 쿼리 작성 시 두 조건을 항상 의식하는 습관을 들이는 것이 좋습니다.

댓글