프로그램 이야기/리빙 포인트 코딩편
[SQL] 문자열 NULL 이 존재하는 컬럼 비교가 잘 안될때...
야생의개발자
2024. 2. 1. 15:38
PrestoSQL을 포함한 대부분의 SQL 데이터베이스 시스템에서 NULL
은 "알 수 없는 값"을 나타냅니다. 따라서 NULL
과의 비교는 일반적인 비교 연산자(=
, !=
, <>
등)를 사용할 때 항상 알 수 없는 결과(NULL
)를 반환합니다. 즉, NULL
값은 NULL
이 아닌 어떤 값과도 '동등하지 않다'고 할 수 없으며, '동등하다'고도 할 수 없습니다.
예를 들어, p.memo
컬럼의 값이 NULL
일 때 다음 조건을 사용하면:
p.memo != 'ForTest'
이 조건은 FALSE
도 TRUE
도 아닌 NULL
을 반환하게 됩니다. SQL에서 NULL
은 조건문에서 FALSE
와 동일하게 취급되므로, 이 조건을 만족하는 행은 결과에 포함되지 않습니다.
따라서 p.memo
가 NULL
인 경우를 포함하려면 NULL
값에 대한 명시적인 검사가 필요합니다. 예를 들어:
(p.memo IS NULL OR p.memo != 'ForTest')
이렇게 하면 p.memo
컬럼이 NULL
이거나 'ForTest'와 다른 값을 가진 행을 모두 선택할 수 있습니다.