2016-01-07 24 views
5

Kann eine WHERE-Klausel NULL anstelle von TRUE oder FALSE zurückgeben? Nach der Übung unten ist es möglich, aber ich kann mir ein Beispiel nicht vorstellen, das NULL zurückgibt, Ist es wirklich möglich?Kann ein WHERE-Klausel-Prädikat zu NULL ausgewertet werden?

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

Die richtige Antwort lautet D. Siehe hier: https://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements005.htm –

+1

So ein NULL == NULL 'würde" UNBEKANNT "zurückgeben. Recht? –

+0

@SuhasK Laut ihrem Dokument ja. –

Antwort

2

In SQL werden alle logischen Operatoren mit TRUE, FALSE und UNKNOWN (Oracle docs) in MySQL ausgewertet UNKNOWN-Ergebnisaufrufe NULL (MySQL docs).

Laut Oracle-Dokumentation:

„für NULL-Werte zu testen, verwenden Sie nur die Vergleichsbedingungen IS NULL und IS NOT NULL Wenn Sie einen anderen Zustand mit Nullen verwenden und das Ergebnis auf dem Wert abhängt. von der Null, dann ist das Ergebnis UNBEKANNT. "

Also nur TRUE, FALSE und UNKNOWN können nach der Auswertung zurückgegeben werden.

Über Ihre Frage:

"Kann eine WHERE-Klausel return NULL statt WAHR oder FALSCH" Streng

in Oracle sprechen - NO, weil das ein solches Ergebnis UNKNOWN genannt.

Aber im Allgemeinen ist die Bedeutung von UNKNOWN und NULL in diesem Kontext äquivalent und es ist nur ein anderer Name für die gleiche Sache. Also das Beispiel von SQL unten (a.a >= all) ausgewertet als UNBEKANNT.

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

In Standard-SQL sind 'UNKNOWN' und' NULL' * distinct * Konzepte. Es ist nur mysql (soweit ich weiß), dass die beiden zusammenfließen. –

+0

@Damien_The_Unbeliever danke, ich habe korrigiert, meine Antwort. –

0

als Grund zu erklären, die Ansicht, dass die SQL-Sprache verwendet eine Drei-Wert-Logik: TRUE, FALSE und NULL. Lassen Sie uns diese Orders-Tabelle betrachten,

enter image description here

Wenn wir die folgende Abfrage ausführen es Reihen für CPU zurückkehren werde nicht und Monitor

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

In diesem Fall für CPU und Monitor Zustand (qty < 1000 Or qty >= 1000) kehrt weder TRUE noch FALSE. Es gibt NULL zurück. Weil es logisch unbekannt ist. Daher ist das Ergebnis der Bedingung in WHERE Klausel unbekannt und es gibt NULL zurück.

Sie können dies reference betrachten.

+0

Standard-SQL beschreibt eine dreiwertige Logik, bei der die möglichen Werte "TRUE", "FALSE" und "UNKNOWN" sind. Es ist nur mysql, soweit ich weiß, verwirrt/verschmilzt "UNKNOWN" und "NULL". –

+0

@Damien_The_Unbeliever Nein, MS SQL macht das Gleiche. Und da sich "UNKNOWN" und "NULL" genau gleich verhalten sollen, sehe ich nicht wirklich, warum man zwei Keywords für dasselbe Ding haben möchte. In jedem Fall haben Sie recht, dass ANSI SQL aus welchem ​​Grund auch immer "UNKNOWN" und "NULL" hat. – Luaan

+0

@Luaan - nicht gemäß [ihrer Dokumentation] (https://msdn.microsoft.com/en-GB/library/ms188074.aspx): "Das Ergebnis eines Vergleichsoperators hat den Booleschen Datentyp. Dieser hat drei Werte : TRUE, FALSE und UNKNOWN " –

0

Nicht einmal ein NULL kann gleich NULL sein.

  1. Der richtige Weg NULL zu verstehen ist, dass es nicht ein Wert ist. Nicht "Dies ist ein NULL-Wert", aber "dieser NULL ist kein Wert." Alles ist entweder ein Wert, oder es ist nicht.
  2. Wenn etwas ein Wert ist, ist es "1" oder "Hallo" oder "grün" oder "$ 5.00 "etc - aber wenn etwas nicht ein Wert ist, ist es einfach nicht irgendetwas überhaupt.
  3. SQL stellt "das hat keinen Wert" durch den speziellen Nichtwert NULL. Wenn jemand sagt "der NULL-Wert", sollte man geistig nicht zustimmen, , weil es so etwas nicht gibt. NULL ist die vollständige Abwesenheit eines beliebigen Werts. betonte Text

Ein Nicht-technische Aspekt

Wenn Sie zwei Mädchen fragen, wie alt sie sind? vielleicht würden Sie sie hören, um zu verweigern, Ihre Frage zu beantworten, geben beide Mädchen Sie NULL als Alter und dies bedeutet nicht, beide haben ein ähnliches Alter. So gibt es nichts gleich Null sein kann.

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