2016-01-07 13 views
5

WHERE句は、TRUEまたはFALSEではなくNULLを戻しますか? 以下の演習によれば可能ですが、NULLを返す例は想像できませんが、本当に可能ですか? 、TRUEFALSE、およびNULL:理由を説明したようWHERE節述部はNULLに評価できますか?

4. Which of the following values can NOT be returned after evaluation of WHERE clause 
condition? 
A. UNKNOWN 
B. TRUE 
C. FALSE 
D. NULL 
Answer: A. If the result of the condition in WHERE clause is not known, NULL is returned. In all 
other scenarios, either TRUE or FALSE is returned. 
+7

正解はD.はここを参照してくださいです:https://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements005.htm –

+1

だから、 'NULL == NULL 'は' UNKNOWN'を返します。右? –

+0

@ SuhasK彼らの文書によると、はい。 –

答えて

2

SQLでは、すべての論理演算子は、UNKNOWN結果がNULL()を呼び出すと、TRUE、FALSE、UNKNOWN(Oracle docs)と評価されます。

Oracleのドキュメントによると:NULL値をテストするには

は」、唯一の比較条件を使用してNULLで、 NULLではありませんあなたがNULLで、他の条件を使用して、結果 が値に依存している場合。 nullの場合、結果はUNKNOWNになります。

評価後、TRUE、FALSE、およびUNKNOWNのみが返されます。

"の代わりにTRUEまたはFALSEのWHERE句の戻りNULLできますか?":あなたの質問について

厳密にオラクルに話す - NOを、このような結果はUNKNOWNと呼ばれているため。

しかし一般に、UNKNOWNとNULLの意味はこの文脈では同等であり、同じものの別の名前に過ぎません。 したがって、以下のSQLの例(a.a >= all)はUNKNOWNと評価されます。

with table_a as (
select null as a from dual 
union all 
select 10 as a from dual 
union all 
select 5 as a from dual), 
table_b as (
select null as a from dual 
union all 
select 10 as a from dual 
union all 
select 5 as a from dual) 

select * from table_a a where a.a >= all(select a from table_b b) 
+1

標準SQLでは、 'UNKNOWN'と' NULL'は* distinct *の概念です。この2つを組み合わせるのはmysql(これまでの私の知る限り)です。 –

+0

@Damien_The_Unbelieverありがとう、私は訂正した、私の答え。 –

0

、SQL言語は3値論理を使用することを検討してください。私たちは、次のクエリを実行する場合は、CPUのための行を返すと、CPUのために、この場合

SELECT * FROM Orders WHERE (qty < 1000 Or qty >= 1000) 

を監視し、条件に(qty < 1000 Or qty >= 1000)戻りどちらTRUEを監視習慣

enter image description here

、のは、このOrdersテーブルを考えてみましょうやFALSE。それはNULLを返します。論理的にはそれは不明であるため。したがって、WHERE節の条件の結果は不明で、NULLを返しました。

これは、referenceと考えることができます。

+0

標準SQLは、可能な値が「TRUE」、「FALSE」および「UNKNOWN」の3値論理を記述します。これはMySQLだけですが、私が知る限り、混乱/ UNKNOWNとNULLを組み合わせます。 –

+0

@Damien_The_Unbelieverいいえ、MS SQLも同様です。 'UNKNOWN'と' NULL'はまったく同じように振る舞うはずなので、同じ理由で2つのキーワードが必要なのは本当にわかりません。どのような場合でも、何らかの理由でANSI SQLにUNKNOWNとNULLの両方があることは間違いありません。 – Luaan

+0

@Luaan - [そのドキュメント](https://msdn.microsoft.com/en-GB/library/ms188074.aspx)によるとはありません: "比較演算子の結果はブール型のデータ型です。これは3つの値:TRUE、FALSE、UNKNOWN " –

0

さえNULLはNULLに等しくすることができます。

  1. NULLを理解するための正しい方法は、それが値ではないということです。いいえ "これはNULL値ですが"このNULLは値ではありません "すべて は値であるか、そうではありません。
  2. 値が「1」、「hello」、「green」、または 「$ 5」の場合。00 "などがありますが、何かが値でないときは、ちょうど ではありません。
  3. SQLは、特別な値ではないNULLによって「これは値がありません」を表します。 誰かが「NULL値」と言うと、そのようなことがないので、 のように精神的に反対のはずです。 NULLは完全な、完全な不在 です。 あなたが二人の女の子を尋ねた場合、どのように古い彼らは?テキスト

A非技術的な側面

を強調しましたかあなたは彼らに聞くでしょう あなたの質問に答えることを拒否する、両方の女の子は年齢としてNULLを与えている とこれは両方が似ている年齢を持っているわけではありません。したがって、 はnullと等しいものはありません。

SELECT 0 IS NULL , 0 IS NOT NULL , '' IS NULL , '' IS NOT NULL, NULL != NULL, NULL = NULL, NULL != '', NULL = ''

関連する問題