복붙노트

[SQL] 왜 널은 널 false로 동일하지 않다

SQL

왜 널은 널 false로 동일하지 않다

나는이 글을 읽고 있었다 : 가져 오기 널 (null) == null이 SQL에서

그리고 합의가 두 개 (Null 허용) SQL 열 사이의 테스트 평등을하려고 할 때, 올바른 접근 방식이 있다는 것입니다 :

where ((A=B) OR (A IS NULL AND B IS NULL))

A와 B가 NULL, NULL 인 경우는 NULL 동일하지 않기 때문에 (A = B)가 여전히 FALSE를 반환한다. 추가 확인이 필요한 이유입니다.

무엇 불평등을 테스트 할 때 어떻습니까? 위의 논의에서 다음, 그것은 나를 시험 불평등에 내가 좋아하는 뭔가를 할 필요가 있다고 생각했다 :

WHERE ((A <> B) OR (A IS NOT NULL AND B IS NULL) OR (A IS NULL AND B IS NOT NULL))

그러나, 나는 그 (적어도하지 인포믹스 11.5에) 필요하지 않습니다 것으로 나타났습니다, 난 그냥 할 수 있습니다 :

where (A<>B)

A와 B는 NULL이 반환 FALSE 인 경우. NULL 경우,이 반환 TRUE 안, NULL 같지 않음?

편집하다 이들은 모두 좋은 답변,하지만 난 내 질문이 조금 애매 생각합니다. 나를 바꿔 허용 :

A 또는 B 중 하나가 NULL이 될 수 있음을 감안할 때, 충분히 자신의 불평등을 확인하는 데있다

where (A<>B)

아니면 명시 적으로 다음과 같이 그것을 확인해야합니까 :

WHERE ((A <> B) OR (A IS NOT NULL AND B IS NULL) OR (A IS NULL AND B IS NOT NULL))

이 질문에 대한 대답이 스레드를 참조하십시오.

해결법

  1. ==============================

    1.NULL을 포함하는 관계식은 실제로 다시 NULL를 얻을 수

    NULL을 포함하는 관계식은 실제로 다시 NULL를 얻을 수

    편집하다

    여기서, <> 임의의 이진 연산자 약자, NULL은 SQL 자리이고, 값 (NULL 값이 아닌) 값이다 :

    논리는 다음과 같습니다 NULL 수단 "값 없음"또는 "알 수없는 값", 따라서 실제 값을 가진 모든 비교가 이해되지 않는다.

    X = 42 참, 거짓 또는 알 수는 X 보유하고 (있는 경우) 어떤 값을 모르는 주어진입니까? SQL은 알 수없는 말한다. X = Y는 모두가 알 수없는 점을 감안, 허위 사실 또는 알 수있다? SQL은 결과를 알 수없는 말했다. 그것은 (모델에 널 (null)을 가진 것은 처음부터없는 경우에도)에만 논리적 이진 관계 운용에 이렇게 말했다.

    SQL은 또한, 두 개의 단항 후위 연산자를 제공 NULL IS와 자신의 피연산자에 따라 NULL이 반환 TRUE 또는 FALSE을지지 않습니다.

  2. ==============================

    2.그 동작은 NULL이 알 수없는 값으로 간주됩니다 삼원 논리를 설립 다음과 때문입니다.

    그 동작은 NULL이 알 수없는 값으로 간주됩니다 삼원 논리를 설립 다음과 때문입니다.

    알 수없는 NULL을 생각한다면, 그것은 훨씬 더 직관적된다 :

    알 수없는 알 수없는 B와 같다? 알 수있는 방법은 그래서 없습니다 : 알 수없는이.

  3. ==============================

    3.널 (null)을 포함하는 모든 비교는 정의되지 않습니다, false로 평가합니다. 방지가 null과 동일하게 평가되는 null로 무엇이 아이디어는,도 방지는 널 (null)에 해당하지 평가 되줍니다.

    널 (null)을 포함하는 모든 비교는 정의되지 않습니다, false로 평가합니다. 방지가 null과 동일하게 평가되는 null로 무엇이 아이디어는,도 방지는 널 (null)에 해당하지 평가 되줍니다.

  4. ==============================

    4.짧은 대답은 ... NULL을 이상한, 당신이 기대하는 것처럼 그들은 정말 작동하지 않습니다.

    짧은 대답은 ... NULL을 이상한, 당신이 기대하는 것처럼 그들은 정말 작동하지 않습니다.

    여기에 널 (NULL)이 SQL에서 작동 방법에 대한 좋은 종이입니다. 나는이 주제에 대한 이해를 개선하는 데 도움이됩니다 생각합니다. 나는 표현에 널 (null) 값 처리에 대한 부분은 당신을 위해 특히 유용 할 것이라 생각합니다.

    http://www.oracle.com/technology/oramag/oracle/05-jul/o45sql.html

  5. ==============================

    5.식 내에서 널 (null)의 기본 (ANSI) 행동이 널 발생합니다 (즉의 경우 충분히 다른 답변이 있습니다).

    식 내에서 널 (null)의 기본 (ANSI) 행동이 널 발생합니다 (즉의 경우 충분히 다른 답변이 있습니다).

    나열되지 않는 MS SQL 서버를 처리 할 때 나는 배치되는 일부 가장자리 사례 및주의 사항 그러나이있다.

    이것은 권장 이동이 아니라 존재를 않습니다 - 그것은 SQL 서버는 null 값 사이에 당신에게 평등을 줄 것이다 SET ANSI_NULLS OFF를 사용하여, 특정 널 = 널 시험에 관한 식의 논리를 재정의 가능합니다.

    SET ANSI_NULLS OFF
    
    select result =
        case
            when  null=null then 'eq' 
            else 'ne'
        end
    
    SET ANSI_NULLS ON
    
    select result =
        case
            when  null=null then 'eq' 
            else 'ne'
        end
    
  6. ==============================

    6.여기에 빠른 수정입니다

    여기에 빠른 수정입니다

    ISNULL (A, 0) = ISNULL (B, 0)

    0는 데이터에 결코 일어날 수있는 일에 변경 될 수 있습니다

  7. ==============================

    7."? 알 수없는 알 수없는 B와 동일하므로 알 수있는 방법이 없습니다 :. 알 수없는"

    "? 알 수없는 알 수없는 B와 동일하므로 알 수있는 방법이 없습니다 :. 알 수없는"

    질문이었다 : 왜 비교 수율 FALSE합니까?

    3 개 값 논리 감안할 때, 그것은 참으로 수확량 UNKNOWN (FALSE되지 않음)에 비교를 위해 현명한 것입니다. 그러나 SQL은 수율 FALSE 및 UNKNOWN하지 않습니다.

    SQL 언어에 perversities의 무수한 중 하나입니다.

    또한, 다음은 고려되어야한다 :

    "알 수 없음"이 삼원 논리 논리 값 인 경우, 그것은 모두가 일어날 두 개의 논리 값과 동등 비교 한 다음, (값) '알 수 없음'으로하는 경우되어야한다 비교 TRUE 수득한다고있다.

    논리 값을 알 수없는 자신을 경우 그 논리 값이 알려진 것을 의미 때문에, 그때 분명히 그는,이 값이 "알 수없는"를 넣어 표시 할 수없는 ( "알 수없는"일하기). 즉을 미국 특허 제 4198037 호, 어떻게 관계 이론은 3 값 논리를 구현하는, 4 값의 논리에 대한 요구 사항을 제기 것을 증명이라고 5 평가 로직의 필요성에 4 개 평가 로직 리드, 등 등 광고 인해서.

  8. from https://stackoverflow.com/questions/1833949/why-is-null-not-equal-to-null-false by cc-by-sa and MIT license