私はあなたが次のようなものを書くことができることを発見しました
SELECT NULL IS UNKNOWN
を返します1。
他に使える場所はありますUNKNOWNか?キーワードではないようです (できませんSELECT UNKNOWN)。NULL IS NULLも真である場合、どのような目的がUNKNOWNありますか?
私はあなたが次のようなものを書くことができることを発見しました
SELECT NULL IS UNKNOWN
を返します1。
他に使える場所はありますUNKNOWNか?キーワードではないようです (できませんSELECT UNKNOWN)。NULL IS NULLも真である場合、どのような目的がUNKNOWNありますか?
UNKNOWNはBOOLEAN NULL... の単なるエイリアスです。これTRUEは の単なるエイリアスで1あり、のFALSEエイリアスでもあります。MySql自体は の単なるエイリアスであるためです。0BOOLEANTINYINT(1)
なぜそこにあるのですか?これは SQL-92 標準の一部であるためです。
<truth value> ::=
TRUE
| FALSE
| UNKNOWN
なぜあなたSELECT NULLはSELECT TRUE、、、できSELECT FALSEないのSELECT UNKNOWNですか?それ自体は MySql の新しいバージョンまでサポートされていなかったためUNKNOWN、おそらく単なるバグです。
私には、MySQL では、ブールの意味で使用されるUNKNOWNのエイリアスのようです。NULL
この参照を見つけることができました:
SQL では、すべての論理演算子が TRUE、FALSE、または NULL (UNKNOWN) に評価されます。
一般的な SQL NULL および UNKNOWN に関するその他の情報:
NOT NULL 制約によって制限されている場合、SQL BOOLEAN は他の言語のブール型のように機能します。ただし、BOOLEAN データ型は、その名前にかかわらず、TRUE、FALSE、および UNKNOWN の真理値を保持できます。これらはすべて、標準に従ってブール値リテラルとして定義されています。この規格はまた、NULL と UNKNOWN は「まったく同じことを意味するために交換可能に使用される可能性がある」と主張しています。
既知の値を持たないブール値を記述する場合にのみ使用します。最初の例で述べたように、これは と同等のブール値ですNULL。
比較に NULL が含まれる場合、そのような場合に問題unknownが発生します。
たとえば、次のクエリを考えてみましょう。
select* from tbl
where x>5
ここで、一部のタプルにx列の null 値が含まれている可能性があると仮定します。さて、各タプルを評価しながら:
x>5は true と評価されますx>5は false と評価されます。x>5評価されるでしょうか? (答え不明)ケース 3 については、true または false のいずれかを言うのは間違っています。したがって、ケース 3 を処理するために、別の論理値が sql に存在しunknownます。
(したがって、SQL には 3 つの論理値があります: true、false、unknown)
さて、ルールは次のとおりです。
where 句の述語がタプルに対して false または unknown と評価される場合、そのタプルは結果に追加されません。
したがって、上記の例では、ケース 1 のタプルのみが結果に追加されます。
このように、SQL は内部的に未知のものを扱います。
また、where 句の述語に複数の論理式が含まれている場合にも、いくつかの結果が得られます。
true and unknownはunknownfalse and unknownはfalseunknown and unknownはunknowntrue or unknownはtruefalse or unknownはunknownunknown or unknownはunknownnot unknownはunknown