제외 명단의 빈칸을 0으로 채우면, 남길 번호도 바뀔까요? PostgreSQL은 조건의 결과를 참·거짓·미정으로 나눠요. 미정 표시 NULL은 숫자 0이 아니에요. 이 규칙을 종이 카드로 계산해 볼까요?
후보는 실제 번호 0, 1, 2입니다. 제외 목록은 1과 NULL 두 줄이에요. 이 과제의 목표는 명시된 번호 1만 빼고 0과 2를 모두 남기는 거예요. 수정 A는 NULL을 0으로 채우고, 수정 B는 NULL 줄만 제거해요. 둘 중 하나만 해요.
참·거짓·미정을 T,F,U라 쓸게요. 후보 x가 목록의 모든 값과 다른지 검사한 결과를 q(x)라 하고, T인 카드만 남겨요. 원래 목록에서는 q(x)=(x≠1) AND (x≠NULL)입니다. NULL과의 비교는 U이며, 이 논리에서는 T AND U=U, F AND U=F입니다.
따라서 원래 목록으로는 아무 카드도 남지 않아요. 이것은 세 번호가 모두 1이라는 뜻이 아니에요. 미정 U를 거짓 F와 같다고 적을 수도 없어요.
A의 목록은 1과 0입니다. 실제 번호 0도 제외되어 2만 남아요. B의 목록에는 1만 있으므로 0과 2가 남아요. 각 수정 뒤 남는 집합을 R이라 쓰면
답은 B입니다. A는 빈칸을 없앴지만 새 제외 번호 0을 추가했어요. 두 수정에 같은 ‘빈칸 처리’ 이름을 붙이기 전에, 남길 카드 두 장을 실제로 꺼내 검산해 봐요. NULL을 언제나 제거하라는 업무 지침이 아니라, 이 목표와 두 수정만 비교한 과제예요. 실제 데이터베이스는 실행하지 않았어요.
착안: PostgreSQL18, Logical Operators의 전체 9.1과 Subquery Expressions의 전체 9.24.3 NOT IN. 알려진 세 값 논리와 미정 비교 규칙만 참고했어요. 번호 카드·목표·두 수정은 자체 작성했으며 원전 코드·표 그림·실제 개인 명단을 옮기지 않았어요.
