프로그래밍SQL 개발자

NULL 처리 방식에 대해 설명해 주세요. 예상치 못한 NULL 값이 위험한 이유와 이를 올바르게 처리하는 방법, 일반적인 실수는 무엇인가요?

Hintsage AI 어시스턴트로 면접 통과

답변.

SQL에서 NULL 값은 "알 수 없는" 또는 "존재하지 않는" 값을 나타냅니다. NULL은 특별한 방식으로 동작합니다:

  • NULL과 어떤 값과의 비교는 = 또는 <>를 사용해도 항상 결과가 UNKNOWN이 됩니다. TRUEFALSE가 아닙니다.
  • NULL의 존재 여부는 IS NULL 또는 IS NOT NULL로 확인해야 합니다.
  • NULL과의 모든 산술 또는 논리 연산은 NULL 값을 반환합니다.

예시:

SELECT * FROM users WHERE name = NULL; -- 어떤 행도 반환되지 않음 SELECT * FROM users WHERE name IS NULL; -- 올바름 SELECT 1 + NULL; -- 결과: NULL

NULL을 대체하기 위해 COALESCE(foo, 0) (첫 번째 비-NULL 값을 반환) 또는 SQL Server에서 ISNULL(foo, 'default')와 같은 함수를 사용합니다.

속임수 질문.

질문: WHERE some_column <> 'value' 조건이 some_column이 NULL인 행에서 어떤 결과를 반환하나요?

답변:

이 행에서는 조건이 충족되지 않습니다: NULL과의 비교는 UNKNOWN을 반환하기 때문에, TRUE가 아닙니다. 따라서 NULL이 있는 행은 결과에 포함되지 않습니다.

예시:

-- some_column | ... -- NULL | ... -- 'abc' | ... -- 'value' | ... SELECT * FROM table WHERE some_column <> 'value'; -- NULL이 있는 행은 포함되지 않음

역사

은행 보고서에서 WHERE status <> 'closed' 조건은 status = NULL인 계좌(예: 새로운 신청)를 고려하지 않아 오류가 발생했습니다. 그 결과 활성 계좌 수가 15% 적게 계산되었습니다.

역사

이메일 개인화 서비스에서 COALESCE(user_name, '존경하는 고객')가 배제되어 거의 천 명의 고객이 이름이 전혀 없는 메시지를 받았고, 이를 자동화 오류로 인식했습니다.

역사

데이터베이스 마이그레이션 중 LEFT JOIN이 예상보다 더 많은 행을 반환했습니다. 왼쪽 테이블에 NULL을 가진 필드가 있었고, WHERE b.field = 'X'와 같은 필터가 JOIN 후 이러한 행을 제거하여 일부 데이터가 손실되었습니다.