복붙노트

[SQL] 왜 NULL = NULL은 SQL 서버에서 false로 평가 않습니다

SQL

왜 NULL = NULL은 SQL 서버에서 false로 평가 않습니다

절은, 항상 false로 평가되는 경우 SQL 서버에서 당신은에 nullParam = NULL이있는 경우. 이것은 반 직관적이며 나에게 많은 오류가 발생했습니다. 나는이 NULL IS 및 NULL 키워드를 할 수있는 올바른 방법을지지 않습니다 이해한다. 그런데 왜 SQL 서버는이 방식으로 작동 하는가?

해결법

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

    1.(또는 "존재하지 않는")이 경우에 "알"로 널 생각해. 당신이 그들 중 하나의 값을 알 수 없기 때문에 이러한 경우 중 하나에, 당신은 그들이 동일하다고 말할 수 없습니다. 당신은 그들이 동일하다고 말할 값을 알 수 없기 때문에 그래서, 널 (null) = null을 평가하여 사실이 아니다으로, (허위 또는 널 (null), 시스템에 따라 다름). 이 동작은 ANSI SQL-92 표준에 정의되어 있습니다.

    (또는 "존재하지 않는")이 경우에 "알"로 널 생각해. 당신이 그들 중 하나의 값을 알 수 없기 때문에 이러한 경우 중 하나에, 당신은 그들이 동일하다고 말할 수 없습니다. 당신은 그들이 동일하다고 말할 값을 알 수 없기 때문에 그래서, 널 (null) = null을 평가하여 사실이 아니다으로, (허위 또는 널 (null), 시스템에 따라 다름). 이 동작은 ANSI SQL-92 표준에 정의되어 있습니다.

    편집하다: 이것은 당신의 ANSI_NULLS 설정에 따라 달라집니다. 당신이 ANSI_NULLS을 경우,이 true로 평가합니다. 예를 들어 다음 코드를 실행 ...

    set ansi_nulls off
    
    if null = null
        print 'true'
    else
        print 'false'
    
    
    set ansi_nulls ON
    
    if null = null
        print 'true'
    else
        print 'false'
    
  2. ==============================

    2.프랭크는 몇 살입니까? 나는 (null)와 모르겠다.

    프랭크는 몇 살입니까? 나는 (null)와 모르겠다.

    셜리는 몇 살입니까? 나는 (null)와 모르겠다.

    프랭크와 셜리 같은 나이인가?

    프랭크와 셜리가 같은 나이를 수도로 정답이 없다 "NO"(널) "나도 몰라"없어야합니다, 우리는 단순히 모른다.

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

    3.여기에 내가 잘하면 내 위치를 명확히한다.

    여기에 내가 잘하면 내 위치를 명확히한다.

    = NULL이 FALSE로 평가하는 것이 NULL은 잘못된 것입니다. 해커와 미스터 제대로 NULL 대답했다. 그 이유이다. 드웨인 크리스텐슨은 스콧 아이비에게 의견에서, 나에게 쓴 :

    그들은 다를 수 있습니다 또는 그들이 하나가 모두 선물을 열 때까지 당신이 모르는 동일 할 수있다. 누가 알아? 희귀하지만 § 불가능하지 - 당신은 서로 모르는 두 당신에게 같은 선물을했던 두 사람이 초대했다.

    질문 : 그럼이 두 UNKNOWN 선물은 (= 동일) 동일? 정답은 불명 (즉, NULL).

    그렇지 만 NULL이 3VL 올바른지 (또는 당신이 제공하는 시스템을 받아들이 괜찮습니다 -이 예제는 것을 증명하기위한 것이었다 "(시스템에 따라, 허위 또는 null 것은) ... .."정답입니다 오답?)

    이 질문에 대한 정답은이 두 점을 강조해야한다 :

    나는 반복 그래서 : SQL은 하나를 강제로 어떤 좋은 재귀 평등의 ​​재산 상태 것으로 해석하지 않습니다

    3VL의 .. (TRUE, FALSE, NULL)이다. 사람들의 기대 즉 (심지어 SQL의 다른 모든 값에 대한 유효 TRUE, FALSE) 2VL, 준수 것 X = 항상 X의 가능한 모든 값을 TRUE로 평가 X - 예외없이.

    (그 변증 그들을 척으로) 한 관계 변수의 일부로서 속성 값 (??)로 할당 할 수있는 NULL 값은 유효한 "이외의 값이"임을 유의도. 그들은 모든 종류의 (도메인)의 허용 값은 그래서뿐만 아니라 논리적 인 표현의 종류.

    그리고 이것은 나의 점이었다 : NULL는, 값으로는 "이상한 짐승"입니다. 완곡 어법없이, 내가 말을 선호 : 넌센스.

    죄송 불쌍한 내 영어 능력에 대한 -이 제제는 훨씬 더 명확하고 더 적은 논쟁의 여지가 있다고 생각합니다.

    이것은 단지 널 (NULL)의 문제 중 하나입니다. 더 나은 전적으로 가능한 경우를 방지 할 수 있습니다.

    § 우리는이 선물은 두 개의 서로 다른 물리적 객체가 유효한 반대하지 항상 사실 그래서, 여기에 값에 대해 우려하고있다; 당신이 미안 해요 확신하지 않으면, 그것은이 값과 "개체"의미의 차이를 설명 할 수있는 장소가 아니다 (관계형 대수는 처음부터 값 의미를 가지고 - 커드의 정보 원칙을 참조, 나는 몇 가지 SQL DBMS의 구현은 돈 생각 't도) 공통의 의미에 관심.

    §§ 내 지식이 허용 공리이다 (형태 또는 다른에서, 그러나 항상 2VL 해석) 고대부터 정확히 때문에 그렇게 직관적이다. 3VLs은 훨씬 더 최근의 개발이다 (실제로 논리의 가족입니다) (하지만 처음 개발되었을 때 나는 확실하지 않다).

    사이드 노트는 : 누군가가 바닥 소개합니다 경우, 단위 및 SQL NULL을 정당화하려는 시도와 같은 옵션 유형은, 나는 단지 아주 자세히 검토 한 후 확신 할 것이다 것입니다 null로 SQL 구현은 사운드 형식 시스템을 가지고 명확하게하는 방법의 쇼, 마지막으로, 무엇에 NULL (이 "값 -하지 - 매우 - 값은") 정말이다.

    무엇에 나는 몇몇 저자를 인용합니다 따릅니다. 오류 또는 누락입니다 아마 광산이 아닌 원래의 저자.

    SQL NULL을에 조 셀코

    나는 조 셀코 종종이 포럼에서 인용 참조하십시오. 분명히 그는 여기에 훨씬 존경받는 작가이다. 그래서, 나는 나 자신에게 말했다 : "그는 널 (NULL)에게 많은 문제를 설명 않습니다 어떻게 SQL NULL을 쓴 무엇?". 고급 SQL 프로그래밍, 제 3 판 : 내 친구 중 하나에 smarties에 대한 조 셀코의 SQL의 전자 책 버전이 있습니다. 어디 보자.

    첫째, 목차. 파업 나를 가장 NULL 언급되는 횟수이고 있다는 것은 매우 다양한 상황에서 :

    등등. 그것은 나에게 "불쾌한 특별한 경우를"반지.

    내가 저작권을 이유로, 필수 자신을 제한하려고,이 책에서 발췌 이러한 경우 일부로 이동합니다. 나는이 따옴표는 "공정한 사용 (fair use)"원칙에 속하고 심지어 책을 구입하는 자극 할 수 있다고 생각 - 나는 아무도 불평하지 않습니다 희망 때문에 (그렇지 않으면 내가 모든 경우에, 그것의 대부분을 삭제해야합니다). 또한, 나는 같은 이유로 코드 조각을보고 삼가하여야한다. 미안합니다. datailed 추론에 대해 읽고 책을 구입.

    따라 어떤에서 괄호 사이에 페이지 번호.

    다시이 "값 아니지만 꽤 값"넌센스. 나머지는 나에게 매우 합리적인 것 같다.

    SQL, NULL을 무한의 적당히 :

    특정 상황에서 정말 수단을 NULL 것에 미정 SQL 구현 :

    데이빗 맥 거버 란 및 C. J. 날짜를 인용 조 셀코 :

    약물 중독으로 NULL을 :

    여기 내 고유의 이의와 심하게하는 상호 작용 "을 적절하게 사용"하는 것입니다 특정 구현 행동.

    (분리 기호)

    그러나 알 수없는, 즉 C. J. 날짜, 그래서 그 자체가 문제의 근원이다 그의 책은 아래의 인용에서, 장 4.5 reccomends. SQL에 널 (null)을 방지 :

    UNKNOWN에 "따로"읽기, 또한 아래 링크.

    (분리 기호)

    이의 : 널 (NULL)이 아니라 SQL을 아는 사람들조차 혼란 아래를 참조하십시오.

    (분리 기호)

    (분리 기호)

    (분리 기호)

    (분리 기호)

    (분리 기호)

    (분리 기호)

    GROUP을에 의해 토론 :

    GROUP BY 절 NULL을 위해 = NULL하지 않는 것을이 수단 3VL 같이 NULL로 평가하지만 TRUE로 평가합니다.

    SQL 표준은 혼란입니다 :

    등등. 나는 Celko으로 충분하다 생각합니다.

    SQL NULL을에 C. J. 날짜

    SQL에서 피하기 NULL을, 기간 : C. J. 날짜에 NULL에 대한 더 급진적이다. 사실, 자신의 SQL 및 관계 이론의 제 4 장 : 어떻게 정확한 기록하기 SQL 코드는 절이와 함께, "NO DUPLICATES, NO (null)"이라는 제목 "4.4은 널 (null)에있어 문제점은 무엇입니까?" 및 "SQL에서 널 (null)을 방지 4.5"(링크를 따라 : Google 도서 덕분에, 당신은 일부 페이지 온라인)을 읽을 수 있습니다.

    SQL NULL을에 파비안 파스칼

    참조 - 데이터베이스 관리에서의 실제적인 문제에서 사고 개업 (아무 발췌 온라인, 죄송합니다)에 대한 :

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

    4.아마 따라,하지만 난 피연산자로 NULL로 대부분의 작업처럼 NULL로 NULL = NULL 평가합니다 생각했다.

    아마 따라,하지만 난 피연산자로 NULL로 대부분의 작업처럼 NULL로 NULL = NULL 평가합니다 생각했다.

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

    5.당신은 두 가지가 무엇인지 모른다해서, 그들은 동일한있어 의미하지 않는다. 당신이 NULL 생각할 때 "NULL"(문자열)을 생각하면 PostgreSQL을의이 구별된다과는 별개을지지 않습니다처럼 그때는 아마 평등의 다른 테스트를 원하는

    당신은 두 가지가 무엇인지 모른다해서, 그들은 동일한있어 의미하지 않는다. 당신이 NULL 생각할 때 "NULL"(문자열)을 생각하면 PostgreSQL을의이 구별된다과는 별개을지지 않습니다처럼 그때는 아마 평등의 다른 테스트를 원하는

    "비교 함수와 연산자"에 PostgreSQL의 워드 프로세서

  6. ==============================

    6.NULL의 개념은 적어도 말, 의문이다. 커드는 관계형 모델과 맥락에서 NULL의 개념을 도입 (그리고 NULL의 한 종류보다 더 많은 제안에 갔다!) 그러나, 관계형 이론은 커드의 원래 글 이후 진화하고있다 : 자신의 제안 중 일부는 이후 삭제 된 (예를 들어, 기본 키) 다른 사람 (예를 들어 세타 사업자)에 포착하지 않습니다. 현대 관계형 이론에서 NULL은 단순히 존재하지 않는 (진정한 관계 이론, 나는 강조해야한다). 세 번째 선언을 참조하십시오. http://www.thethirdmanifesto.com/

    NULL의 개념은 적어도 말, 의문이다. 커드는 관계형 모델과 맥락에서 NULL의 개념을 도입 (그리고 NULL의 한 종류보다 더 많은 제안에 갔다!) 그러나, 관계형 이론은 커드의 원래 글 이후 진화하고있다 : 자신의 제안 중 일부는 이후 삭제 된 (예를 들어, 기본 키) 다른 사람 (예를 들어 세타 사업자)에 포착하지 않습니다. 현대 관계형 이론에서 NULL은 단순히 존재하지 않는 (진정한 관계 이론, 나는 강조해야한다). 세 번째 선언을 참조하십시오. http://www.thethirdmanifesto.com/

    SQL 언어는 이전 버전과의 호환성의 문제를 겪고있다. NULL은 SQL에 그것의 방법을 발견하고 우리가 함께 붙어있다. 확실하게, SQL에서 NULL의 구현 결함이 (SQL 서버의 구현은 일이 더는 ANSI_NULLS 옵션으로 인해 복잡합니다).

    나는 기본 테이블에 NULL이 허용 열의를 사용하지 않는 것이 좋습니다.

    아마도 내가 유혹하지 않아야하지만, 난 그냥 NULL이 SQL에서의 작동 방식에 대한 내 자신의 수정을 주장하고 싶었 :

    NULL = NULL 평가하여 UNKNOWN합니다.

    UNKNOWN 논리 값이다.

    NULL은 데이터 값입니다.

    이것은 예를 들어 증명하기 쉽다

    NULL = NULL을 선택

    제대로 SQL 서버에서 오류가 발생합니다. 결과는 데이터 값이라면 여기에 몇 가지 답변 (잘못) 우리가하고자 제안으로 우리는, NULL를 볼 것으로 예상한다.

    논리 값 UNKNOWN 각각 SQL DML 및 SQL DDL 다르게 처리된다.

    SQL DML에서 UNKNOWN는 결과 집합에서 제거 할 행을 발생합니다.

    예를 들면 :

    CREATE TABLE MyTable
    (
     key_col INTEGER NOT NULL UNIQUE, 
     data_col INTEGER
     CHECK (data_col = 55)
    );
    
    INSERT INTO MyTable (key_col, data_col)
       VALUES (1, NULL);
    

    삽입도 NULL = NULL로 CHECK 조건 결의 불구하고,이 행에 성공합니다. 이 인해 SQL-92 ( "ANSI") 표준에 정의되어 있습니다 :

    논리 다음, 다시 조심스럽게 그 읽기.

    일반 영어에서는, 위의 새 행이 UNKNOWN 인에 대해 '의심의 혜택'을 부여하고 통과 할 수있다.

    SQL DML, 절 따라 훨씬 쉽게 인에 대한 규칙에서 :

    일반 영어로 UNKNOWN으로 평가 행은 결과 집합에서 제거됩니다.

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

    7.TechNet의 방법 널 (null) 값 작업에 대한 좋은 설명이있다.

    TechNet의 방법 널 (null) 값 작업에 대한 좋은 설명이있다.

    널 수단의 알 수없는.

    따라서 부울 식

    값 = NULL

    false로 평가하지 않습니다, 그것은 null로 평가하지만 절은 다음 아무 것도 반환되지 않습니다 어디의 최종 결과 인 경우. 즉 널 (null)을 반환하는 것은 상상하기 어려울 것이기 때문에, 그것을 할 수있는 실용적인 방법이다.

    다음을 이해하는 흥미롭고 매우 중요합니다 :

    쿼리에서 우리가있는 경우

    where (value=@param Or @param is null) And id=@anotherParam
    

    그때

    NULL로 "값 = @ PARAM"가된다 true로 평가 "@param은 null입니다" true로 "ID = anotherParam @"평가됩니다

    평가 될 수있는 표현이된다 그래서

    (null 또는 사실) 그리고 진실

    우리는 "null 또는 사실이"null로 평가됩니다 여기에 생각하는 유혹 할 수 있으며, 따라서 전체 표현식이 널 (null)이되고 행이 반환되지 않습니다.

    이것은 그렇지 않다. 왜?

    이후의 경우 하나의 매우 논리적 연산자는 OR 연산자와 사실이다 "null 또는 사실"TRUE로 평가가, 다음, 어떤 다른 피연산자의 값을 문제 때문에 작업이 true를 반환하지 않습니다. 따라서 다른 피연산자를 알 수없는 (NULL)입니다 중요하지 않습니다.

    우리는 마침내 진정한 = 사실 때문에 행이 반환됩니다 그래서.

    참고 : 사실, "널 그리고 사실"널 (null)로 평가 동일한 맑은 논리가 "null 또는 true"가와.

    최신 정보: 좋아, 그냥 내가 위의 관계에서 확실히 재미를 판명하는 너무 여기에 나머지를 추가 할 완료 확인합니다.

    "널 (null) 또는 false"로 평가하여 null로, "널 그리고 거짓"false로 평가합니다. :)

    논리는 자명 이전과 같이 물론 아직도이다.

  8. ==============================

    8.NULL 수단 "미지의 값"과 두 개의 미지의 값이 동일하지 않을 수 있기 때문이다.

    NULL 수단 "미지의 값"과 두 개의 미지의 값이 동일하지 않을 수 있기 때문이다.

    그래서, 우리의 논리 NULL N ° 1 NULL N ° 2와 동일로하는 경우, 우리는 어떻게 든 그에게 말해야 :

    SELECT 1
    WHERE ISNULL(nullParam1, -1) = ISNULL(nullParam2, -1)
    

    기지 값 N ° -1 1 -1 2 N ° 동일한 곳

  9. ==============================

    9.NULL은 심지어 자체 아무것도 동일하지 않습니다. NULL의 행동을 이해하는 내 개인적인 해결책은 가능 :만큼 그것을 사용하지 않도록하는 것입니다.

    NULL은 심지어 자체 아무것도 동일하지 않습니다. NULL의 행동을 이해하는 내 개인적인 해결책은 가능 :만큼 그것을 사용하지 않도록하는 것입니다.

  10. ==============================

    10.MSDN은 그들이 생기게 널에 좋은 설명 글과 세 개의 상태 논리를 가지고있다.

    MSDN은 그들이 생기게 널에 좋은 설명 글과 세 개의 상태 논리를 가지고있다.

    즉, SQL92 스펙을 정의의 알 수없는 등의 NULL 및 NUL은 다음 연산자에서 사용 미숙에 대한 예기치 않은 결과가 발생합니다

    = operator NULL   true   false 
    NULL       NULL   NULL   NULL
    true       NULL   true   false
    false      NULL   false  true
    
    and op     NULL   true   false 
    NULL       NULL   NULL   false
    true       NULL   true   false
    false      false  false  false
    
    or op      NULL   true   false 
    NULL       NULL   true   NULL
    true       true   true   true
    false      NULL   true   false
    
  11. ==============================

    11.질문: 한 알 수없는 다른 알 수없는 동일합니까? (NULL = NULL) 그 질문은 참 또는 거짓이 설정하여 ANSI_NULLS에 따라 기본값은 그래서 아무도 대답 할 수있는 무언가이다.

    질문: 한 알 수없는 다른 알 수없는 동일합니까? (NULL = NULL) 그 질문은 참 또는 거짓이 설정하여 ANSI_NULLS에 따라 기본값은 그래서 아무도 대답 할 수있는 무언가이다.

    그러나 질문 : 이 알 수없는 변수 알 수 있나요? 이 질문은 상당히 다르다 참으로 답변을 얻을 수 있습니다.

    nullVariable는 = NULL의 값을 비교한다 nullVariable 널 변수의 상태를 비교된다

  12. ==============================

    12.혼란은 NULL을 사용하여 약 온다 간접 (추상화)의 수준에서 발생한다.

    혼란은 NULL을 사용하여 약 온다 간접 (추상화)의 수준에서 발생한다.

    "무엇을이 크리스마스 트리 아래의"비유에 다시가는, "알 수없는"는 상자 A에 무엇에 대한 지식의 상태를 설명

    당신은 상자 (A)에 무엇인지 알 수 없도록, 당신은 그것의 "알"을 말하지만, 그는 "알 수없는"상자 안에 의미하지 않습니다. 알 수없는이 아닌 다른 뭔가 상자, 개체의 가능성이 어떤 종류의, 또는 아마도 아무것도 상자에입니다.

    당신이 상자 B에 무엇이 모르는 경우 마찬가지로, 당신은 "알 수 없음"인 것으로 내용에 대한 지식의 당신의 국가에 레이블을 지정할 수 있습니다.

    그래서 여기 키커가있다 : (. "알 수없는"또는 "나는 상자의 내용물 모른다"되는 두 경우 모두에서 지식 귀하의 상태) 상자에 대한 지식의 귀하의 상태가 상자 B.에 대한 지식의 당신의 상태와 동일하지만, 상자의 내용 또는 동일하지 않을 수 있습니다.

    SQL 다시가는, 이상적으로 당신은 당신이 그들이 무엇인지 알고있을 때 값을 비교할 수 있어야한다. 우리가 값으로 사용하도록 유혹하고 불행하게도, 지식의 부족을 설명하는 레이블, 세포 자체에 저장됩니다. 우리는 상자 (A)에 그리고 / 또는 우리가 상자 B에 무엇을 모르는 모르는 때 상자 (A)의 내용이 박스 B의 내용과 동일 "로 이어질 것이기 때문에 그러나 우리는, 값으로 그것을 사용하지 말아야합니다 (논리적으로, "박스 B에있어 내가 상자 (A)에 있고 난이 박스 B에 무엇이 모르는 경우, 다음 상자 (A)에 무엇을 모르는 경우 ="암시은 false입니다.)

    야호, 죽은 말.

  13. ==============================

    13.내가 개발자의 관점에서 하나를 추가 할 수 있도록 답은 여기에 모든 CS 관점에서 오는 것 같다.

    내가 개발자의 관점에서 하나를 추가 할 수 있도록 답은 여기에 모든 CS 관점에서 오는 것 같다.

    개발자 NULL의 경우 매우 유용합니다. 답은 여기에 NULL 수단의 알 수없는 말을하고, 어쩌면 사실 CS 이론, 그것은 시간이 지났는데 기억하지 않습니다. 실제 개발에서하지만, 내 경험 적어도, 그 시간의 1 %에 대해 발생합니다. 다른 99 %는이 값을 알 수없는 경우에 사용됩니다 있지만 결석하는 것으로 알려져있다.

    예를 들면 :

    나는 확실히 어떤 점에서 대부분의 개발자는 WHERE 값 = NULL을 쓴거야 어떤 결과를 얻을하지 않고 그들이 IS NULL 구문에 대해 알게 방법의 그. 그냥이 질문에 링크 된 사람이 얼마나 많은 표를 본다.

    SQL 데이터베이스는 도구이며, 그들은 자신의 사용자가 이해하는 가장 쉬운 방법을 설계되어야한다.

  14. ==============================

    14.우리는 두 개의 미지수가 동일 할 것으로 예상 캔트 그래서 널 (null)는 SQL에서 알 수 없습니다.

    우리는 두 개의 미지수가 동일 할 것으로 예상 캔트 그래서 널 (null)는 SQL에서 알 수 없습니다.

    그러나 당신은 (기본적으로 자사에) Off로 ANSI_NULLS를 설정하여 그 동작을 얻을 수 있습니다 당신은 널 (null)에 = 연산자를 사용할 수 있습니다

    SET ANSI_NULLS off
    if null=null
    print 1
    else 
    print 2
    set ansi_nulls on
    if null=null
    print 1
    else 
    print 2
    
  15. ==============================

    15.당신은 정부가 국민에 대한 정보를 등록하는 작업. 이 나라의 모든 사람을위한 국가 ID가 포함되어 있습니다. 아이가 40 년 전에 교회의 문에서 왼쪽으로했다, 아무도 자신의 부모가 누구인지 모른다. 이 사람의 아버지 ID는 NULL입니다. 두 그런 사람들이 존재한다. (형제 자매 사람들을) 적어도 하나의 다른 사람과 같은 아버지의 ID를 공유하는 사람들을 계산합니다. 당신도 그 두 가지를 계산합니까?

    당신은 정부가 국민에 대한 정보를 등록하는 작업. 이 나라의 모든 사람을위한 국가 ID가 포함되어 있습니다. 아이가 40 년 전에 교회의 문에서 왼쪽으로했다, 아무도 자신의 부모가 누구인지 모른다. 이 사람의 아버지 ID는 NULL입니다. 두 그런 사람들이 존재한다. (형제 자매 사람들을) 적어도 하나의 다른 사람과 같은 아버지의 ID를 공유하는 사람들을 계산합니다. 당신도 그 두 가지를 계산합니까?

    대답은 형제 자매 또는하지 않은 경우 우리가 모르기 때문에 당신이하지 않는, 전혀 없습니다.

    그 * = 당신이 NULL 옵션이없는 가정, 대신 그런 다음 쿼리에있는 것 등 "알 수없는", 아마도 빈 문자열이나 숫자 0 또는 * 문자를 표현하기 위해 몇 가지 미리 정해진 값을 사용 *, 0 = 0, 그리고 ""= ""등이 있습니다 (위의 예제에 따라) 원하고 무엇을하지 평범한 일상 외부 명확한 프린지 경우입니다 위의 당신은 종종 (이러한 경우에 대한 예를 잊을 수로 ) 생각, 당신은 NULL = NULL 사실이 아니다는 것을 당신을 기억하는 언어가 필요합니다.

    필요는 발명의 어머니.

  16. ==============================

    16.다른 훌륭한 답변에 그냥 추가 :

    다른 훌륭한 답변에 그냥 추가 :

    AND: The result of true and unknown is unknown, false and unknown is false,
    while unknown and unknown is unknown.
    
    OR: The result of true or unknown is true, false or unknown is unknown, while unknown or unknown is unknown.
    
    NOT: The result of not unknown is unknown
    
  17. ==============================

    17.당신은 당신이 사용할 수있는 두 가지 NULL을위한 진정한 복귀 식을 찾는 경우 :

    당신은 당신이 사용할 수있는 두 가지 NULL을위한 진정한 복귀 식을 찾는 경우 :

    SELECT 1 
    WHERE EXISTS (
        SELECT NULL
        INTERSECT
        SELECT NULL
    )
    

    당신이 한 테이블에서 다른 데이터를 복제 할 경우 유용합니다.

  18. ==============================

    18.항등 테스트는, 예를 들어, case 문 때 절에, 변경할 수 있습니다

    항등 테스트는, 예를 들어, case 문 때 절에, 변경할 수 있습니다

    XYZ = NULL 
    

    XYZ IS NULL
    

    나는 치료의 공백과 NULL I 동일로 빈 문자열을 원하는 경우 종종 같은 평등 테스트를 사용 :

    (NULLIF(ltrim( XYZ ),'') IS NULL)
    
  19. from https://stackoverflow.com/questions/1843451/why-does-null-null-evaluate-to-false-in-sql-server by cc-by-sa and MIT license