Heim >Datenbank >MySQL-Tutorial >Wie wirken sich NULL-Werte auf die Ergebnisse der NOT IN-Klausel von SQL aus?
SQLs NOT IN
-Klausel und die Nuancen von NULL-Werten
Die NOT IN
-Klausel in SQL dient dazu, Zeilen auszuschließen, die mit Werten innerhalb einer angegebenen Liste übereinstimmen. Das Vorhandensein von NULL
-Werten in dieser Liste führt jedoch zu Komplexitäten.
Das Problem: Unerwartete Ergebnisse mit NULL
Bedenken Sie diese SQL-Abfragen:
<code class="language-sql">A: SELECT 'true' WHERE 3 IN (1, 2, 3, NULL); B: SELECT 'true' WHERE 3 NOT IN (1, 2, NULL);</code>
Abfrage A liefert ein Ergebnis, Abfrage B jedoch nicht. Dies liegt daran, wie SQL NULL
-Vergleiche verarbeitet. Abfrage A prüft, ob 3 gleich einem Wert in der Liste ist. Da 3 gleich 3 ist, wird ein Ergebnis zurückgegeben.
Abfrage B prüft umgekehrt, ob 3 nicht gleich zu jedem Wert ist. Wenn ANSI_NULLS aktiviert ist (die Standardeinstellung in vielen Systemen), führt ein Vergleich mit NULL
zu UNKNOWN
. UNKNOWN
ist weder wahr noch falsch; Daher gibt Abfrage B keine Zeilen zurück.
ANSI_NULLS-Einstellung und ihr Einfluss
Das Deaktivieren von ANSI_NULLS ändert NULL
das Vergleichsverhalten. Wenn ANSI_NULLS deaktiviert ist, gibt ein Vergleich mit NULL
TRUE zurück, wenn die Werte ungleich sind, und FALSE, wenn sie gleich sind. Folglich würde Abfrage B ein Ergebnis mit deaktiviertem ANSI_NULLS zurückgeben, da 3 NOT IN (1, 2, NULL)
als TRUE ausgewertet würde.
Die Natur von NULL verstehen
Es ist wichtig, sich daran zu erinnern, dass NULL
einen unbekannten Wert bedeutet. Der Vergleich von NULL
mit einem beliebigen Wert ergibt immer UNKNOWN
, da Gleichheit oder Ungleichheit nicht definitiv bestimmt werden kann. Bei der Verwendung von NOT IN
mit NULL
-Werten müssen potenzielle Probleme vorhergesehen werden, und für eine robuste Abfrageverarbeitung sollten geeignete Techniken implementiert werden, z. B. explizite NULL
-Prüfungen oder die Verwendung von COALESCE
zum Ersetzen von NULL
durch einen bekannten Wert .
Das obige ist der detaillierte Inhalt vonWie wirken sich NULL-Werte auf die Ergebnisse der NOT IN-Klausel von SQL aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!