7

私はあなたが次のようなものを書くことができることを発見しました

SELECT NULL IS UNKNOWN

を返します1

他に使える場所はありますUNKNOWNか?キーワードではないようです (できませんSELECT UNKNOWN)。NULL IS NULLも真である場合、どのような目的がUNKNOWNありますか?

4

4 に答える 4

10

UNKNOWNBOOLEAN NULL... の単なるエイリアスです。これTRUEは の単なるエイリアスで1あり、のFALSEエイリアスでもあります。MySql自体は の単なるエイリアスであるためです。0BOOLEANTINYINT(1)

なぜそこにあるのですか?これは SQL-92 標準の一部であるためです。

<truth value> ::=
                TRUE
              | FALSE
              | UNKNOWN

なぜあなたSELECT NULLSELECT TRUE、、、できSELECT FALSEないのSELECT UNKNOWNですか?それ自体は MySql の新しいバージョンまでサポートされていなかったためUNKNOWN、おそらく単なるバグです。

于 2013-02-28T00:00:48.860 に答える
2

私には、MySQL では、ブールの意味で使用されるUNKNOWNのエイリアスのようです。NULL

この参照を見つけることができました:

SQL では、すべての論理演算子が TRUE、FALSE、または NULL (UNKNOWN) に評価されます。

MySQL ドキュメント - 12.3.3。論理演算子

一般的な SQL NULL および UNKNOWN に関するその他の情報:

NOT NULL 制約によって制限されている場合、SQL BOOLEAN は他の言語のブール型のように機能します。ただし、BOOLEAN データ型は、その名前にかかわらず、TRUE、FALSE、および UNKNOWN の真理値を保持できます。これらはすべて、標準に従ってブール値リテラルとして定義されています。この規格はまた、NULL と UNKNOWN は「まったく同じことを意味するために交換可能に使用される可能性がある」と主張しています。

ウィキペディアの NULL

于 2013-02-27T23:27:36.060 に答える
1

既知の値を持たないブール値を記述する場合にのみ使用します。最初の例で述べたように、これは と同等のブール値ですNULL

于 2013-02-27T23:25:28.203 に答える
0

比較に NULL が含まれる場合、そのような場合に問題unknownが発生します。

たとえば、次のクエリを考えてみましょう。

select* from tbl
where x>5

ここで、一部のタプルにx列の null 値が含まれている可能性があると仮定します。さて、各タプルを評価しながら:

  1. x が非 null で x>5 の場合、式x>5は true と評価されます
  2. x が非 null で x<=5 の場合、式x>5は false と評価されます。
  3. しかし、x が null の場合、式は何にx>5評価されるでしょうか? (答え不明)

ケース 3 については、true または false のいずれかを言うのは間違っています。したがって、ケース 3 を処理するために、別の論理値が sql に存在しunknownます。
(したがって、SQL には 3 つの論理値があります: true、false、unknown)

さて、ルールは次のとおりです。

where 句の述語がタプルに対して false または unknown と評価される場合、そのタプルは結果に追加されません。

したがって、上記の例では、ケース 1 のタプルのみが結果に追加されます。

このように、SQL は内部的に未知のものを扱います。

また、where 句の述語に複数の論理式が含まれている場合にも、いくつかの結果が得られます。

  • 式の結果true and unknownunknown
  • 式の結果false and unknownfalse
  • 式の結果unknown and unknownunknown
  • 式の結果true or unknowntrue
  • 式の結果false or unknownunknown
  • 式の結果unknown or unknownunknown
  • 式の結果not unknownunknown
于 2021-08-30T12:54:54.677 に答える