Heim >Datenbank >MySQL-Tutorial >Warum schlägt != beim Vergleich mit NULL in SQL fehl?
SQLs !=-Operator und das NULL-Rätsel
Der-Operator (ungleich) von !=
SQL stellt beim Umgang mit NULL
-Werten eine besondere Herausforderung dar. Während es Nicht-NULL-Werte effektiv vergleicht, ist sein Verhalten mit NULL
nicht intuitiv.
Das Problem mit != NULL
Bedenken Sie Folgendes:
<code class="language-sql">SELECT * FROM MyTable WHERE MyColumn != NULL; -- Returns 0 rows SELECT * FROM MyTable WHERE MyColumn NULL; -- Also returns 0 rows</code>
Diese Abfragen, die darauf abzielen, Zeilen zu finden, in denen MyColumn
nicht NULL
ist, geben überraschenderweise leere Ergebnismengen zurück. Das ist kein Fehler; es liegt in der Natur von NULL
. NULL
stellt keinen Wert dar; es stellt das Fehlen eines Werts dar. Daher ergibt der Vergleich eines Werts mit NULL
unter Verwendung von !=
oder =
immer UNKNOWN
, nicht TRUE
oder FALSE
.
Die Lösung: IS NOT NULL
Um Nicht-NULL-Werte genau zu identifizieren, verwenden Sie das Prädikat IS NOT NULL
:
<code class="language-sql">SELECT * FROM MyTable WHERE MyColumn IS NOT NULL; -- Returns the expected rows</code>
IS NOT NULL
(und sein Gegenstück IS NULL
) sind speziell für die Verarbeitung von NULL
-Werten in SQL-Vergleichen konzipiert.
Vergleich mit Nicht-NULL-Werten
Der !=
-Operator funktioniert beim Vergleich mit Nicht-NULL-Werten wie erwartet:
<code class="language-sql">SELECT * FROM MyTable WHERE MyColumn != 'ValueX'; -- Returns rows where MyColumn is not 'ValueX'</code>
Schlüssel zum Mitnehmen
Genaue SQL-Abfragen mit NULL
-Werten erfordern die Verwendung von IS NOT NULL
und IS NULL
. Vermeiden Sie die Verwendung von !=
oder =
für NULL
-Vergleiche, um unerwartete Ergebnisse zu vermeiden. Verwenden Sie diese dedizierten Prädikate für die zuverlässige Verarbeitung von NULL
in Ihren SQL-Anweisungen.
Das obige ist der detaillierte Inhalt vonWarum schlägt != beim Vergleich mit NULL in SQL fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!