違いは何ですか
where x is null
そして
where x = null
そして、なぜ後者が機能しないのですか?
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 で実行されているこれを参照してください
NULLはNULLと等しくないであることに注意することが重要です。
NULL
は値ではないため、別の値と比較できません。
where x is null
は、xがNULL値かどうかを確認します。
where x = null
はxがNULLであるかどうかをチェックします。これは決して真ではありません
最初は、フィールド値がnull
であるかどうかを確認する正しい方法ですが、null
は何にも等しくない特別な値であるため、後で期待どおりに動作しないため、=
それ。
したがって、フィールド値がnull
であるかどうかを確認する必要がある場合は、次を使用します。
where x is null
の代わりに:
where x = null
平等は絶対に決定できるものだと思います。 null
の問題は、本質的に未知であることです。 Null
は、他の値と組み合わせてnull
-不明です。 「私の値はnull
と等しいですか?」入力がnull
であっても、毎回不明です。 IS NULL
の実装はそれを明確にすると思います。