SQL에서 NULL이 부울 식으로 전파되지 않는 이유는 무엇입니까?
SQL에서 NULL을 가진 피연산자를 포함하는 모든 연산은 NULL을 산출합니다(IS NULL 또는 IS NOT NULL 연산자의 명백한 예외 포함).그러나 NULL은 TRUE 또는 FALSE를 반환할 수 있는 AND 또는 OR 연산자와 전파되지 않습니다.예를 들어 MariaDB 10.4의 다음은 각각 NULL과 0을 반환합니다.
select 0 & null, 0 and null
다른 점은 첫 번째가 약간 AND이고, 두 번째가 부울 AND라는 것입니다.부울 연산에서 NULL이 전파되지 않는 이유는 무엇입니까?
NULL 값은 가능한 일련의 전체 의미를 갖습니다.IIRC Chris Date는 약 7가지 다른 해석을 발견했습니다.
NULL에 대한 매우 일반적인 해석은 "모르겠다"입니다.또 다른 하나는 "해당 없음"입니다.
따라서 NULL 값의 "모르겠다" 해석을 사용하여 조건을 평가해 보겠습니다.예를 들어 두 사람이 있다고 가정합니다.그리고 당신은 그들의 나이를 비교하려고 합니다.A라는 사람은 마침 31살입니다.다른 사람 B의 경우는 당신은 모릅니다.
A가 B만큼 나이가 많은지에 대한 질문은 긍정적으로 대답할 수 없습니다.하지만 그것 역시 부인할 수 없습니다.사실, 당신은 모릅니다.따라서 여기서 true 값은 NULL입니다.
두 사람의 나이를 더하면 같은 문제에 봉착하게 됩니다.우리는 그들의 나이의 합에 대해서는 아무것도 모릅니다.다시 결과 값은 NULL입니다.
이것이 NULL 값을 처리하는 방법을 정의해야 하는 이유입니다.데이터베이스 시스템에서는 이를 알 수 없습니다.
우리는 가지고 있다.0 and null
. MariaDB에서,0
그리고.FALSE
동의어인그래서 저희가.FALSE AND NULL
.그렇지만FALSE AND <anything>
항상 입니다FALSE
- 여기에 어떤 가치가 대입되든 간에, 그 어떤 것도 이 진술을 할 수 없다는 것은 의심의 여지가 없습니다.TRUE
지금이다.
그래서 합선을 한 다음에 돌려주는 겁니다.FALSE
/0
결과.유사하게,1 OR NULL
돌아와야 할1
.
NULL
는 "unknown" 값의 의미론을 가지고 있습니다.그것은 "실종"이라는 의미론을 가지고 있지 않습니다.뉘앙스입니다.
하지만, 그것은 "전파"됩니다.AND
그리고.OR
, 생각하시는 것처럼은 아닙니다.그래서:
true AND NULL --> NULL, because the value would depend on what NULL is
false AND NULL --> false, because the first value requires that the result is false
인WHERE
그리고.WHEN
절,NULL
는 "false"로 취급됩니다.단, 인CHECK
제약,NULL
"true"로 처리됩니다. 즉, 명시적으로 잘못된 값만 실패합니다.NULL
구속력이 있는
그렇지 않으면 다음과 같은 거의 모든 작업이 올바른 것입니다.NULL
돌아가다NULL
.그&
operator는 부울 값과는 무관한 비트 와이즈 연산자입니다.그것은 단지 다음과 같은 또 다른 "수학적" 연산자일 뿐입니다.+
, 아니면*
, 그래서 가치는.NULL
어떤 피연산자라도NULL
.
한가지 매우 중요한 예외는NULL
-안전한 비교 작업자,<=>
.
언급URL : https://stackoverflow.com/questions/61266356/why-doesnt-null-propagate-in-boolean-expression-in-sql
'programing' 카테고리의 다른 글
카산드라를 사용하지 않을 때? (0) | 2023.10.18 |
---|---|
SQLPlus의 연결을 끊거나 종료하지 않고 오류가 발생할 때 SQLPlus에서 스크립트를 종료하고 SQLPlus 프롬프트로 돌아가려면 어떻게 해야 합니까? (0) | 2023.10.18 |
자동 호출 기능 전 세미콜론? (0) | 2023.10.18 |
MySQL 월별/년 단위 반복 이벤트 (0) | 2023.10.18 |
Excel/VBA: 단일 셀을 인수로 전달 (0) | 2023.10.18 |