2010-10-07 29 views
8

Mögliche Duplizieren:
Why does NULL = NULL evaluate to false in SQL serverWarum gibt Spalte = NULL keine Zeilen zurück?

Wenn erzeugen Sie eine Abfrage, um die Daten in der Tabelle "MyTab" für Spalte --- Alter, Geschlecht, Geburtsdatum einfügen, ID

INSERT INTO MyTab 
VALUES (22, '', '', 4) 

Was ist der Wert in Spalte Sex & DOB? Ist es NULL?

Wenn der Wert dann NULL ---

SELECT * FROM MyTab 
WHERE Sex=NULL 

obige Abfrage gibt Ausgabe ---- keine Zeilen ausgewählt --- warum ??

, wenn der Wert dann nicht NULL ist ---

SELECT * FROM Mytab 
WHERE Sex IS NULL 

obige Abfrage gibt den Ausgang ---- wie ??

+1

NULL ist nicht gleich etwas. So = NULL gibt immer false zurück. Und deshalb gibt es eine spezielle Syntax zum Testen der Nullheit. Dies gilt für alle ANSI SQL-Datenbanken. – APC

+0

"Was wird der Wert in Spalte Sex & DOB sein? Ist es NULL?" Hängt von RDBMS ab. In Oracle wäre es ja null. In SQL Server, nein, es wäre der Wert eine leere Zeichenfolge, '' ''. –

Antwort

2

Von Null (SQL)

Misunderstanding, wie Null-Werke ist die Ursache für eine große Anzahl von Fehlern in SQL-Code, die beide in ISO-Standard SQL Anweisungen und in der spezifischen SQL Dialekten unterstützt von Echt Welt Datenbank-Management-Systeme. Diese Fehler sind in der Regel das Ergebnis von Verwechslung zwischen Null und entweder 0 (Null) oder einer leeren Zeichenfolge (String Wert mit einer Länge von Null, in SQL als ‚‘ dargestellt). Null ist definiert durch den ISO-SQL-Standard als unterscheidet sich von einem leeren String und dem numerischen Wert 0 jedoch. Während Null die Abwesenheit von einen beliebigen Wert angibt, repräsentieren die leere Zeichenfolge und die numerische Null beide tatsächliche Werte.

Auch von SET ANSI_NULLS

Wenn SET ANSI_NULLS ausgeschaltet ist, die Equals (=) und Ungleich (<>) Vergleich Operatoren folgen nicht dem SQL-92-Standard . Eine SELECT-Anweisung mit WHERE column_name = NULL gibt die Zeilen mit Nullwerten in column_name zurück. Eine SELECT-Anweisung mit WHERE column_name <> NULL gibt die Zeilen mit nichtnull -Werten in der Spalte zurück. In , eine SELECT-Anweisung mit WHERE column_name <> XYZ_value gibt alle Zeilen, die nicht XYZ-Wert sind und , die nicht NULL sind.

10

NULL ist ein spezieller Wert in SQL bezeichnet die Fehlen von Daten. Als solche Sie tun Abfragen wie nicht können:

SELECT fields FROM table WHERE column = NULL 

NULL zu nichts verglichen werden kann, einschließlich NULL selbst. Stattdessen würden Sie brauchen:

SELECT fields FROM table WHERE column IS NULL 

aber in Ihrem Fall sind Sie wirklich einen leeren Wert in Sex und DOB einsetzen.
Und leere Wert ist nicht NULL. Sie würden für die Abfrage haben:

SELECT fields FROM table WHERE column = '' 
0

NULL bedeutet, dass keine Daten (nicht einmal leer oder leer Sachen), so Column = NULL wird nicht funktionieren, obwohl Column IS NULL Zeilen mit dieser Spalte als NULL zurückgeben sollte. Sie fügen jedoch einen Wert ein, so dass der Vergleich mit NULL keine Zeilen zurückgibt.

2

'' - es ist meine leere Zeichenfolge. Wenn Sie NULL einfügen möchten, müssen Sie yo

INSERT INTO MyTab 
      VALUES (22, '', NULL, 4) 
0

verwenden Wie bereits gesagt, erste Abfrage keine Ausgabe gibt, weil Sie nicht für NULL überprüfen mit Operator entspricht. Die zweite Abfrage ist rätselhafter - meine einzige Vermutung ist, dass Sie Oracle verwenden, das leere Zeichenfolgen als NULL behandelt.

Die Antwort auf die Frage nach Werten in den Feldern Sex und DOB hängt vom Typ der Felder und der Datenbank-Engine ab, mit der Sie arbeiten.

Verwandte Themen