select 'true' from dual where 1 not in (null,1);
これを実行すると、何も結果が得られません
私の質問は何ですか:
上記のクエリは論理的に同等です
select 'true' from dual where 1 != null and 1 != 1;
上記のステートメントと同じように何も結果になりません
どうか明らかにしてください?
select 'true' from dual where 1 not in (null,1);
これを実行すると、何も結果が得られません
私の質問は何ですか:
上記のクエリは論理的に同等です
select 'true' from dual where 1 != null and 1 != 1;
上記のステートメントと同じように何も結果になりません
どうか明らかにしてください?
正しいです (ただしIN
、これは句ではなく演算子であり、Oracle だけでなく SQL 全般でこのように機能することに注意してください)。
where 1 not in (null,1)
次と同等です。
where 1 != null and 1 != 1
実際には次のように書く必要があります:
WHERE 1 NOT IN (NULL, 1)
と
WHERE 1 <> NULL AND 1 <> 1
これは次と同じです:
WHERE (1 <> NULL) AND (1 <> 1)
これは次のように評価されます。
WHERE UNKNOWN AND FALSE
さらに次のように:
WHERE FALSE
したがって、行は正しく返されません。
があった場合、 (演習として残します) とWHERE 1 NOT IN (NULL, 2)
評価され、行も返されないことに注意してください。WHERE UNKNOWN
NULL 値との比較におけるスクリプトの問題。使用する必要があります
column is null and column = 1
実際には NULL は未定義の値です。NULL との比較では、True も False も返されず、NULL が返されます。NULL = NULLでも
そのため、1 not in (null,1)は機能しません。
はい、そうです。
select something from table where column not in (1,2,3);
と同等です
select something from table where column != 1 and column != 2 and column != 3;
IN ステートメントは OR ステートメントのコレクションですが、NOT IN は AND ステートメントのコレクションですが、等しくもありません。
したがって、NOT IN は次と同等です。
1 <> NULL
AND 1 <> 1
AND ...
IN は次のようになります。
1 = NULL
OR 1 = 1
OR ...
NULL の風変わりな性質のため、コレクションに NULL があると機能しないことに注意してください。
はい。正しいです。また、NULL 値は IS NULL と比較する必要があります