web-dev-qa-db-ja.com

SQLはnullおよび= null

可能性のある複製:
「= null」および「IS NULL」とは
IS NULLと= NULLには違いがあります

違いは何ですか

where x is null

そして

where x = null

そして、なぜ後者が機能しないのですか?

108
Sachin Kainth

SQLで、比較演算子(たとえば、=!=<、を使用したnull値と他の値(別のnullを含む)の比較etc)はnullになります。これは、where句の目的でfalseと見なされます(厳密には、「false」ではなく「true」ではありませんが、効果は同じです) )。

理由は、nullは「不明」を意味するため、nullとの比較の結果も「不明」であるためです。したがって、where my_column = nullをコーディングすると、行にヒットしません。

SQLは、is nullおよびis not nullを介して、列がnullであるかどうかをテストするための特別な構文を提供します。これは、null(またはnull)。

上記のさまざまな条件とその効果を示すSQLを次に示します。

create table t (x int, y int);
insert into t values (null, null), (null, 1), (1, 1);

select 'x = null' as test , x, y from t where x = null
union all
select 'x != null', x, y from t where x != null
union all
select 'not (x = null)', x, y from t where not (x = null)
union all
select 'x = y', x, y from t where x = y
union all
select 'not (x = y)', x, y from t where not (x = y);

1行のみを返します(予想どおり):

TEST    X   Y
x = y   1   1

SQLFiddle で実行されているこれを参照してください

120
Bohemian

NULLはNULLと等しくないであることに注意することが重要です。

NULLは値ではないため、別の値と比較できません。

where x is nullは、xがNULL値かどうかを確認します。

where x = nullはxがNULLであるかどうかをチェックします。これは決して真ではありません

57
Curt

最初は、フィールド値がnullであるかどうかを確認する正しい方法ですが、nullは何にも等しくない特別な値であるため、後で期待どおりに動作しないため、=それ。

したがって、フィールド値がnullであるかどうかを確認する必要がある場合は、次を使用します。

where x is null

の代わりに:

where x = null
6
Sarfraz

平等は絶対に決定できるものだと思います。 nullの問題は、本質的に未知であることです。 Nullは、他の値と組み合わせてnull-不明です。 「私の値はnullと等しいですか?」入力がnullであっても、毎回不明です。 IS NULLの実装はそれを明確にすると思います。

3
Vikram