프로그램 이야기/리빙 포인트 코딩편

[SQL] 문자열 NULL 이 존재하는 컬럼 비교가 잘 안될때...

야생의개발자 2024. 2. 1. 15:38

PrestoSQL을 포함한 대부분의 SQL 데이터베이스 시스템에서 NULL은 "알 수 없는 값"을 나타냅니다. 따라서 NULL과의 비교는 일반적인 비교 연산자(=, !=, <> 등)를 사용할 때 항상 알 수 없는 결과(NULL)를 반환합니다. 즉, NULL 값은 NULL이 아닌 어떤 값과도 '동등하지 않다'고 할 수 없으며, '동등하다'고도 할 수 없습니다.

예를 들어, p.memo 컬럼의 값이 NULL일 때 다음 조건을 사용하면:

p.memo != 'ForTest'

이 조건은 FALSETRUE도 아닌 NULL을 반환하게 됩니다. SQL에서 NULL은 조건문에서 FALSE와 동일하게 취급되므로, 이 조건을 만족하는 행은 결과에 포함되지 않습니다.

따라서 p.memoNULL인 경우를 포함하려면 NULL 값에 대한 명시적인 검사가 필요합니다. 예를 들어:

(p.memo IS NULL OR p.memo != 'ForTest')

이렇게 하면 p.memo 컬럼이 NULL이거나 'ForTest'와 다른 값을 가진 행을 모두 선택할 수 있습니다.