Ich bin überrascht zu sehen, dass IS NULL und = NULL unterschiedliche Ergebnisse in einer Select-Abfrage liefern. Was ist der Unterschied zwischen ihnen? Wann man was benutzt. Ich würde mich freuen, wenn Sie mich ausführlich erklären können.Gibt es einen Unterschied zwischen IS NULL und
Antwort
= NULL
ist immer unknown
(dies ist Stück 3 Zustandslogik), aber WHERE
Klausel behandelt es als false
und fällt aus der Ergebnismenge. Also für NULL
sollten Sie IS NULL
verwenden
Gründe werden hier beschrieben: Why does NULL = NULL evaluate to false in SQL server
Es ist nicht "falsch". Es ist "unbekannt". Wenn es falsch wäre, wäre 'NOT (X = NULL)' '' wahr '. Das ist nicht der Fall. SQL verwendet 3-wertige Logik. –
@Martin Smith Ich weiß über 3 Zustand Logik. Die 'WHERE'-Klausel behandelt jedoch 'unknown' als' false' und fällt von der Ergebnismenge ab. – Andrey
Um zu bestehenden Antworten hinzufügen, es hängt davon ab, ob Sie ANSI_NULLS oder nicht, bei der Verwendung von „= NULL“.
-- This will print TRUE
SET ANSI_NULLS OFF;
IF NULL = NULL
PRINT 'TRUE'
ELSE
PRINT 'FALSE'
-- This will print FALSE
SET ANSI_NULLS ON;
IF NULL = NULL
PRINT 'TRUE'
ELSE
PRINT 'FALSE'
wegen der dreiwertigen Logik von SQL:
http://en.wikipedia.org/wiki/Null_%28SQL%29#Three-valued_logic_.283VL.29
Auszug aus einem entsprechenden Absatz:
Herausforderungen
Null war die Fokus der Kontroverse und eine Quelle von Debatte wegen seiner zugehörigen dreiwertigen Logik (3VL), spezielle Anforderungen für die Verwendung in SQL-Joins, und die spezielle Handhabung von Aggregatfunktionen und SQL-Gruppierungsoperatoren erforderlich. Computer Wissenschaftsprofessor Ron van der Meyden fasste die verschiedenen Probleme wie folgt zusammen: "Die Inkonsistenzen im SQL-Standard bedeuten, dass es nicht möglich ist, irgendeine intuitive logische Semantik der Behandlung von Nullen in SQL zuzuordnen." Obwohl verschiedene Vorschläge zur Lösung dieser Probleme gemacht wurden, hat die Komplexität der Alternativen ihre weitverbreitete Anwendung verhindert.
+1 Für die einzige Antwort, dies zu erwähnen. –
Bitte posten Sie keine Link-Only-Antworten. Fügen Sie hier die relevanten Informationen aus dem Link ein, sodass Ihre Antwort auch dann nützlich ist, wenn die Zielwebsite nicht mehr angezeigt wird. (Das ist besser als Kommentar.) – jpaugh
- 1. Gibt es einen Unterschied zwischen "is" und isKindOfClass()?
- 2. Unterschied zwischen MySQL IS NOT NULL und! = ''
- 3. null und NULL, gibt es einen Unterschied?
- 4. Lisp: Gibt es einen Unterschied zwischen 'Null und Null?
- 5. Gibt es einen Unterschied zwischen $ @ und "$ @"?
- 6. Gibt es einen Unterschied zwischen '=' und In?
- 7. Gibt es einen Unterschied zwischen VbNullString und ""?
- 8. Was ist "= null" und "IS NULL"
- 9. Unterschiede zwischen "IS NULL" und "ISNULL()" in Mysql
- 10. Gibt es einen Unterschied zwischen LayoutInflater.from (Kontext) und context.getLayoutInflater()?
- 11. Unterschied zwischen .is und .filter in jQuery
- 12. Warum gibt es einen Unterschied zwischen "Import" und "Import *"?
- 13. Gibt es einen Unterschied zwischen den Randwerten?
- 14. Gibt es einen Unterschied zwischen diesen Anweisungen?
- 15. Unterschied zwischen. Nil? und == null
- 16. Unterschied zwischen NULL und Null in PHP
- 17. Unterschied zwischen Null == Objekt und Objekt == null
- 18. Gibt es einen Unterschied zwischen Typguss und Typkonvertierung?
- 19. Gibt es einen Unterschied zwischen Sudo-Modus und Kernel-Modus?
- 20. Gibt es einen Unterschied zwischen .NET und ASP.NET
- 21. Gibt es einen Unterschied zwischen einem Steuerelement und einem Widget?
- 22. Gibt es in Rails 3 einen Unterschied zwischen = und assign_attributes?
- 23. Gibt es einen Unterschied zwischen glClearColor (0,0,0,0,0,0,0,0) und glClear (COLOR_BUFFER_BIT)?
- 24. Gibt es einen Unterschied zwischen XSD: Pattern und C# Regex?
- 25. Gibt es einen Unterschied zwischen der ** Kopie ** und ** addAll **?
- 26. Gibt es einen Unterschied zwischen SqlConnection.CreateCommand und neuen SqlCommand?
- 27. Gibt es einen Unterschied zwischen BigDecimal ("0") und BigDecimal.ZERO?
- 28. Gibt es einen Unterschied zwischen NSString vergleichen: und isEqual (ToString) :?
- 29. gibt es einen Unterschied zwischen Malloced-Arrays und neue Arrays
- 30. Gibt es einen Unterschied zwischen ui: Fragment und s: Fragment?
Weitere Informationen finden Sie im [Wikipedia Artikel] (http://en.wikipedia.org/wiki/Null_%28SQL%29). –
Dies ist eine dup von einer Reihe von Fragen: http://stackoverflow.com/questions/1843451/why-does-null-null-evaluate-to-false-in-sql-server – Paddy