Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
pyrrhon registrierter User
Anmeldungsdatum: 22.05.2004 Beiträge: 8770
|
(#530810) Verfasst am: 27.07.2006, 21:18 Titel: Buddha und SQL |
|
|
In SQL werden NULL-Werte lustig behandelt: nehmen wir eine Spalte vom Typ Integer an und lassen wir weiters eine Query laufen (WHERE columnname <> 1). Wir sehen, dass keine Zeile ausgegeben wird, die in dieser Spalte den Wert NULL hat.
Ich verstehe, dass NULL nicht gleich 1 ist, aber NULL ist in SQL ebenso wenig nicht gleich 1. Das erinnert mich an Buddha, der gefragt wurde, ob es wahr sei, dass wir eine ewige Seele hätten, und mit "Nein" antwortete. Dann wurde er gefragt, ob es dann falsch sei, dass wir eine ewige Seele hätten, und Buddha antwortete ebenfalls mit "Nein".
Da ist also dieser zustandlose Zustand des Nicht-Dualismus, der NULL ist und leer bezüglich aller dualistischen Fragen, der nicht dieses und nicht jenes, weder das Nicht-Sein von diesem noch das Nicht-Sein von jenem ist. Ich beginne zu begreifen, was Buddha sagte, und zwar mit Hilfe des Microsoft SQL Servers.
|
|
Nach oben |
|
 |
Sokrateer souverän
Anmeldungsdatum: 05.09.2003 Beiträge: 11649
Wohnort: Wien
|
(#530831) Verfasst am: 27.07.2006, 21:42 Titel: |
|
|
Nein, denn die Semantik von "<>" betrifft nur Zahlen, genauso wie "=". NULL ist keine Zahl.
Ist ungefähr so, wie wenn du fragst. Welches von den folgenden Dingen ist kleiner als ein Haus: "Hase, Stuhl, Blume, Grün, Eiche, Jumbo-Jet"
Ergebnis: "Hase, Stuhl, Blume"
Ergebnis der Frage nach größeren Dingen: "Eiche, Jumbo-Jet"
"Grün" kommt in keiner Antwortmenge vor.
Die Frage nach "<>" ist nicht die logische Negation von "=", genauso wie "größer" nicht die Negation von "kleiner" ist.
In der echten Negation müsste "NULL" dabei sein, genauso wie sich Buddha entscheiden müsste. So widerspricht er sich einfach.
|
|
Nach oben |
|
 |
Nergal dauerhaft gesperrt
Anmeldungsdatum: 17.07.2003 Beiträge: 11433
|
(#530870) Verfasst am: 27.07.2006, 22:41 Titel: |
|
|
Und was lernen wir daraus?
-Buddha hat nicht mit SQL gearbeitet!
-Er spricht ständig Variablen an die er nicht deffiniert hat (Nirvana)!
-Nicht alles unverständliche aus Indien ist Softwarecode.
-Der Browser wechselt bereits auf Dalai Lama 14.0 und noch immer wird das Gott-Tag falsch interpretiert.
|
|
Nach oben |
|
 |
CoS Antitheist
Anmeldungsdatum: 10.07.2005 Beiträge: 2734
|
(#530948) Verfasst am: 28.07.2006, 01:56 Titel: |
|
|
WHERE columnname <> 1 = wo die Spalte größer UND kleiner 1 ist = unmöglich. Keine Zahl ist größer und kleiner 1
Deine Abfrage könnte aber auch so aussehen:
WHERE spalte kleiner 1 oder spalte größer 1
(wenn ichs als SQL Syntax schreibe spinnt die Forensoftware )
Ich würde so abfragen:
WHERE columnname != 1
Dann kriegst Du alle Werte die nicht 1 sind...
oder wenn Du nur die "Null" Werte willst
WHERE columnname = ''
bzw.
WHERE columnname = NULL
Also nix Buddah
_________________ "Wenn Sie mich suchen, ich halte mich in der Nähe des Wahnsinns auf, genauer gesagt auf der schmalen Linie zwischen Wahnsinn und Panik, gleich um die Ecke von Todesangst, nicht weit weg von Irrwitz und Idiotie!"
|
|
Nach oben |
|
 |
CoS Antitheist
Anmeldungsdatum: 10.07.2005 Beiträge: 2734
|
(#530956) Verfasst am: 28.07.2006, 02:18 Titel: |
|
|
Ahh hab mich geirrt - Stimmt - <> nachfolgende Bedingungszeichen sind ja immer "oder"...
Kann das vielleicht sein weil "NULL" nicht gleich 0 ist?
P.S.: Ja das isses - 0 und NULL sind verschieden. Hat eine Zahl direkt den Wert 0 wird er bei der Abfrage mit ausgegeben!
Bei Programmiersprachen ist 0 und "FALSE" das gleiche - Das irritiert natürlich...
_________________ "Wenn Sie mich suchen, ich halte mich in der Nähe des Wahnsinns auf, genauer gesagt auf der schmalen Linie zwischen Wahnsinn und Panik, gleich um die Ecke von Todesangst, nicht weit weg von Irrwitz und Idiotie!"
|
|
Nach oben |
|
 |
Heike J registrierter User
Anmeldungsdatum: 16.07.2003 Beiträge: 26284
|
(#530977) Verfasst am: 28.07.2006, 08:22 Titel: |
|
|
CoS hat folgendes geschrieben: | Ahh hab mich geirrt - Stimmt - <> nachfolgende Bedingungszeichen sind ja immer "oder"... |
Anders wäre schlecht...
Zitat: | Kann das vielleicht sein weil "NULL" nicht gleich 0 ist?
P.S.: Ja das isses - 0 und NULL sind verschieden. Hat eine Zahl direkt den Wert 0 wird er bei der Abfrage mit ausgegeben!
Bei Programmiersprachen ist 0 und "FALSE" das gleiche - Das irritiert natürlich... |
IST NULL (das Gegenteil von IST NICHT NULL) entspricht einem leeren Feld. Hat nix mit 0 zu tun.
|
|
Nach oben |
|
 |
tati auf Wunsch deaktiviert
Anmeldungsdatum: 16.03.2005 Beiträge: 567
|
(#530987) Verfasst am: 28.07.2006, 08:57 Titel: Re: Buddha und SQL |
|
|
Nergal hat folgendes geschrieben: | Und was lernen wir daraus?
-Buddha hat nicht mit SQL gearbeitet!
-Er spricht ständig Variablen an die er nicht deffiniert hat (Nirvana)!
-Nicht alles unverständliche aus Indien ist Softwarecode.
-Der Browser wechselt bereits auf Dalai Lama 14.0 und noch immer wird das Gott-Tag falsch interpretiert. |
Da NULL einen undefinierten Zustand darstellt, versagen logischerweise alle Vergleichsoperatoren. Um NULL-Werte abzufragen ist deshalb explizit die Klausel WHERE ATTRIB IS [NOT] NULL zu verwenden.
Gruss
Tati
Zuletzt bearbeitet von tati am 28.07.2006, 11:08, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Galaxisherrschers Katze Verwöhntes Haustier
Anmeldungsdatum: 06.04.2005 Beiträge: 5018
|
(#531089) Verfasst am: 28.07.2006, 11:02 Titel: |
|
|
CoS hat folgendes geschrieben: | Ahh hab mich geirrt - Stimmt - <> nachfolgende Bedingungszeichen sind ja immer "oder"... |
Wobei in BASIC ja <> generell für Ungleichheit verwendet wird, unabhängig davon, ob die größer/kleiner-Relation tatsächlich darauf anwenden lässt... Vielleicht hat das ja zu Verwirrung geführt.
_________________ "(...)steak can be attached to a baby to attract lions(...)" (Aus der ESRB-Beschreibung von Scribblenauts)
|
|
Nach oben |
|
 |
Shadaik evolviert
Anmeldungsdatum: 17.07.2003 Beiträge: 26377
Wohnort: MG
|
(#531100) Verfasst am: 28.07.2006, 11:32 Titel: |
|
|
Galaxisherrschers Katze hat folgendes geschrieben: | CoS hat folgendes geschrieben: | Ahh hab mich geirrt - Stimmt - <> nachfolgende Bedingungszeichen sind ja immer "oder"... |
Wobei in BASIC ja <> generell für Ungleichheit verwendet wird, unabhängig davon, ob die größer/kleiner-Relation tatsächlich darauf anwenden lässt... Vielleicht hat das ja zu Verwirrung geführt. | Mich wundert, warum das solche Verwirrung stiftet, beim Symbol größergleich sagt auch niemand, dass es keine Zahl geben kann, die zB größergleich 1 ist - entweder ist eine Zah 1, größer als eins oder kleiner.
_________________ Fische schwimmen nur in zwei Situationen mit dem Strom: Auf der Flucht und im Tode
|
|
Nach oben |
|
 |
CoS Antitheist
Anmeldungsdatum: 10.07.2005 Beiträge: 2734
|
(#531346) Verfasst am: 28.07.2006, 16:24 Titel: |
|
|
Heike Jackler hat folgendes geschrieben: | CoS hat folgendes geschrieben: | Ahh hab mich geirrt - Stimmt - <> nachfolgende Bedingungszeichen sind ja immer "oder"... |
Anders wäre schlecht...
Zitat: | Kann das vielleicht sein weil "NULL" nicht gleich 0 ist?
P.S.: Ja das isses - 0 und NULL sind verschieden. Hat eine Zahl direkt den Wert 0 wird er bei der Abfrage mit ausgegeben!
Bei Programmiersprachen ist 0 und "FALSE" das gleiche - Das irritiert natürlich... |
IST NULL (das Gegenteil von IST NICHT NULL) entspricht einem leeren Feld. Hat nix mit 0 zu tun. |
Richtig, nur ist es bei Programmiersprachen anders
Weise ich beispielsweise im PHP einer Variable den Wert 0 zu und frage dann ob die Variable leer ist, wird mir mit true (also wahr) geantwortet - Also 0 und leer ist für PHP das gleiche...Um 0 in PHP direkt abzufragen muss man so fragen:
Code: | $test = 0;
if($test===0) {
echo "test war 0";
} |
gibt "test war 0" aus!
Aber eben auch:
Code: | $test = 0;
if(!$test) {
echo "test war leer";
} |
gibt "test war leer" aus, obwohl test einen wert enthielt...
_________________ "Wenn Sie mich suchen, ich halte mich in der Nähe des Wahnsinns auf, genauer gesagt auf der schmalen Linie zwischen Wahnsinn und Panik, gleich um die Ecke von Todesangst, nicht weit weg von Irrwitz und Idiotie!"
|
|
Nach oben |
|
 |
Nergal dauerhaft gesperrt
Anmeldungsdatum: 17.07.2003 Beiträge: 11433
|
(#531976) Verfasst am: 29.07.2006, 13:44 Titel: |
|
|
Zitat: | Da NULL einen undefinierten Zustand darstellt, versagen logischerweise alle Vergleichsoperatoren. Um NULL-Werte abzufragen ist deshalb explizit die Klausel WHERE ATTRIB IS [NOT] NULL zu verwenden.
Gruss
Tati |
Dann soll die Var als String deffiniert werden, hat ja keiner was von Rechnen gesagt.
|
|
Nach oben |
|
 |
Rene Hartmann Säkular? Na klar!
Anmeldungsdatum: 17.07.2003 Beiträge: 1404
Wohnort: Rhein-Main
|
(#531995) Verfasst am: 29.07.2006, 14:01 Titel: Re: Buddha und SQL |
|
|
viator hat folgendes geschrieben: | In SQL werden NULL-Werte lustig behandelt: nehmen wir eine Spalte vom Typ Integer an und lassen wir weiters eine Query laufen (WHERE columnname <> 1). Wir sehen, dass keine Zeile ausgegeben wird, die in dieser Spalte den Wert NULL hat.
Ich verstehe, dass NULL nicht gleich 1 ist, aber NULL ist in SQL ebenso wenig nicht gleich 1. Das erinnert mich an Buddha, der gefragt wurde, ob es wahr sei, dass wir eine ewige Seele hätten, und mit "Nein" antwortete. Dann wurde er gefragt, ob es dann falsch sei, dass wir eine ewige Seele hätten, und Buddha antwortete ebenfalls mit "Nein". |
Buddha kannte offensichtlich die dreiwertige Logik nicht.
Eine funktionierende Logik mit NULL erfordert einen dritten Wahrheitswert "Vielleicht" für Vergleiche mit NULL. Aber ganz agesehen davon, ob das eine gute Idee ist, ist das NULL-Handling in SQL reichlich inkonsistent.
_________________ "Es kommt darauf an, zur Gruppe der Individualisten zu gehören"
|
|
Nach oben |
|
 |
Sokrateer souverän
Anmeldungsdatum: 05.09.2003 Beiträge: 11649
Wohnort: Wien
|
(#532213) Verfasst am: 29.07.2006, 18:47 Titel: Re: Buddha und SQL |
|
|
Rene Hartmann hat folgendes geschrieben: | Buddha kannte offensichtlich die dreiwertige Logik nicht.
Eine funktionierende Logik mit NULL erfordert einen dritten Wahrheitswert "Vielleicht" für Vergleiche mit NULL. Aber ganz agesehen davon, ob das eine gute Idee ist, ist das NULL-Handling in SQL reichlich inkonsistent. |
Nein, da braucht man überhaupt keinen dritten Wahrheitswert. Abgesehen davon kann man jede mehrwertige Logik in einer zweiwertigen darstellen.
Schreiben wir es in der Prädikatenlogik an:
Das Gegenteil von "größer(X,NULL)" ist nicht "kleinergleich(X,NULL), sondern vielmehr "¬größer(X, NULL)"
Die Negation "¬" dreht immer den Wahrheitswert um. "größer" und "kleinergleich" sind beides unabhängige Prädikate.
Nehmen wir vielleicht ein weniger verwirrendes Beispiel her und zwar mit den Prädikaten "männlich" und "weiblich".
Folgt aus "¬männlich(X) => weiblich(X)". Nein, denn man kann leicht Gegenbeispiele bringen. Ein Schuh ist nicht männlich. Die Aussage "männlich(Schuh)" ist falsch. Die Negation "¬männlich(Schuh)" ist wahr. Ist der Schuh deshalb weiblich? Nein!
|
|
Nach oben |
|
 |
|