Kriterium "<>139" filtert auch "null" - warum?

Louis1965

Benutzer
Beiträge
16
Hallo
Es ist nicht das erste Mal, dass ich diese Frage sinngemäss hier und anderswo stelle bzw. gestellt habe. Nette Poster hatten jeweils versucht, sie mir zu beantworten. Aber ich hatte bisher immer einen unentwirrbaren Knopf und die Diskussionen arteten leider aus.

Eine Antwort war zum Beispiel:
"Wenn man Null mit etwas oder nicht etwas vergleicht, schließt man
Null aus, weil es sich seit jeher nur von einem Null-Vergleich
angesprochen fühlt."

Darf ich wieder einen Versuch starten? Denn ich hatte heute morgen wieder den genau gleichen Effekt in MS-Access, den ich leider wieder nicht sofort erkannte.

Ich verstehe einfach nicht, warum "null" mit "<>139" verglichen false sein soll. Für mich ist es halt schon true, weil in einem Feld, wo "nichts" drinsteht, halt eben die Zahl 139 effektiv nicht drinsteht.

Kann mir jemand den Knopf entwirren?

Vielen Dank.
Grüsse
Louis
 
Werbung:
Ich würde schon mal beim schreiben unterscheiden zwischen der Zahl 0, und sie auch als 0 schreiben, und der Abwesenheit von Daten, NULL.

NULL ist keine Zahl, sondern ein Merker für die Abwesenheit von Daten, also sollte man damit auch nicht rechnen oder arbeiten. Sobald NULL wo beteiligt ist kommt immer ein undefinierter Wert raus, oder eben NULL.

Stell Dir einfach vor, da stünde nicht NULL sondern UNBEKANNT. Wenn ich jetzt schreibe "139 <> UNBEKANNT" dann merkst Du vielleicht, dass das wenig Sinn ergibt.

Wenn also in einer Spalte NULL erlaubt ist, sollte dieser Fall im Programm/Skript immer mitgedacht werden und durch ein NULLVALUE o.ä. abgedeckt werden.
 
Kann mir jemand den Knopf entwirren?

Die menschliche Vorstellung dieses Problems und das Unverständnis zu der technischen Umsetzung dürftest Du nicht allein haben.
Vielleicht ist es erstmal am einfachsten, nicht über die Gleichheit oder Ungleichheit zu grübeln, sondern die Vergleichsoperatoren zu betrachten.

Gleich, größer, kleiner, ungleich sind für den Fall NULL nicht definiert und letztlich schlicht nicht implementiert. Der Algorithmus, der den Vergleich ausführt, behandelt diesen Fall nicht.
Statt dessen gibt es separate Operatoren die extra dafür implementiert sind.

Warum ist das so? Wahrscheinlich faule Entwickler... ?

Ich kann es mathematisch nicht begründen und eine mathematische Begründung ist wahrscheinlich auch nicht hilfreich für das Verständnis, aber in der Praxis ist es so, dass es vollkommen unterschiedliche Fälle sind, ob ein Wert bekannt ist, also exakt bekannt oder unbekannt, nicht definiert. In der Menge von Zahlen und Buchstaben geht diese Bedeutung zwar leicht unter, wen juckt es, ob es ein Leerstring ist "" oder NULL? Da kann man doch mal 5 grade sein lassen oder?! Könnte man manchmal vielleicht, aber wer entscheidet, wann es geht und wann nicht?

Am prägnantesten ist die Problematik bei True und False, Booltyp. Oftmals sind solche Spalten als mandatory, Pflichtfelder definiert. Das bedeutet, es sind wirklich nur genau 2 Zustände für dieses Feld gültig. Ein Beispiel: An der Tankstelle muss ich wissen, ist es ein Dieselmotor? Ja/Nein. Es macht einen bedeutenden Unterschied, ob es tatsächlich ein Dieselmotor ist (true), ein Benziner (false) oder ob diese Information unbekannt ist (null). Wenn ich keine Ahnung hab, was das geliehene Fahrzeug tankt, kann die Gleichbehandlung von false und null sehr negative Konsequenzen haben.

Gegenbeispiel für eine Geschlechtsangabe: true, false, null
Das dürfte in vielen (alten) Implementierungen als ein bool, not mandatory angelegt sein. Ist das Geschlecht einer Person männlich, weiblich oder unbekannt. Die Relevanz dieser Frage ist meist nicht besonders groß und damit ergibt sich durch die Option, den Wert nicht anzugeben ein 3. Zustand. Ob der 3. Fall auch einen 3. Verarbeitungsweg erfordert, muss der Entwickler dann an vielen Stellen einzeln unterscheiden.

Oft ist die "bequeme" Lösung dann, die Spalten grundsätzlich als mandatory zu definieren. Dann gibt es einfach kein NULL und ich muss nicht viel Sonderbehandlungen implementieren. Damit hat man die Verantwortung an den Anwender abgegeben, der dann mangels Alternativen gezwunden ist, sich Informationen auszudenken (ohne die Folgen zu kennen)
 
Werbung:
Zurück
Oben