Logische Operatoren (and, or, not) |
Home Zurück Vor |
„And“, „Or“ und „Not“ sind logische Operatoren. Sie werden verwendet, um Ausdrücke in „Select“- und „Where“-Klauseln der „SQL-Auswahl“ zusammenzufassen. MapInfo Pro behandelt jeden dieser Ausdrücke als Test, der auf jeden Datensatz in der Relation angewandt wird. Für jeden Test wird eine Antwort in Form von Yes/No (True/False) ausgegeben. MapInfo Pro verwendet die logischen Operatoren, um zu bestimmen, wie die einzelnen Antworten in einer einzigen Antwort zusammengefasst werden sollen: Erfüllt der aktuelle Datensatz die Auswahlbedingung?
Angenommen, Sie möchten alle Grundstücke auswählen, die sich im Bundesland Hessen befinden und deren Wert mindestens 250000 € beträgt. Jeder Datensatz muss zwei Kriterien erfüllen, von denen jedes als einfacher Ausdruck formuliert werden kann: 1) Wert >= 250000 2) Bundesland = „Hessen“ Sie könnten zunächst alle Grundstücke mit einem Mindestwert von 250.000 € auswählen. Anschließend könnten Sie auf Basis dieses Ergebnisses eine weitere Auswahl durchführen, mit der Sie nach allen Grundstücken in Hessen suchen. Es ist jedoch einfacher, beide Operationen mithilfe des logischen Operators „And“ zusammenzufassen. 3) Bundesland = „Hessen“ and Wert >= 250000 Wenn MapInfo Pro einen Datensatz darauf untersucht, ob er die durch den Ausdruck vorgegebene Bedingung erfüllt, werden zwei Tests durchgeführt: Ist Bundesland gleich Hessen? Ist der Wert größer oder gleich 250000? Wenn die Antwort auf beide Fragen positiv ausfällt (True bzw. Yes), wird der Datensatz in die aktuelle Auswahl übernommen. Wenn die Antwort auf eine oder beide Fragen negativ ausfällt (False bzw. No), wird der Datensatz nicht in die aktuelle Auswahl übernommen.
Wie aber gehen Sie vor, wenn Sie alle Grundstücke auswählen möchten, deren Wert mindestens 250000 € beträgt und die sich nicht in Hessen befinden? Sie können mithilfe von „not“ die erste Klausel von Ausdruck 3 negieren, woraus sich Ausdruck 4 ergibt: 4) not (Bundesland = „Hessen“) and Wert >= 250000 Nur Datensätze, in denen das Land nicht Hessen entspricht, erfüllen die erste Klausel von Ausdruck 4. Betrachten Sie nun Ausdruck 5:
5) not (Bundesland=„Hessen“ and Wert >= 250000) Ausdruck 5 ist lediglich die Negierung von Ausdruck 3. Alle Datensätze, die Ausdruck 3 erfüllen, erfüllen nicht Ausdruck 5. Alle Datensätze, die nicht Ausdruck 3 erfüllen, erfüllen wiederum Ausdruck 5.
Sie können „or“ verwenden, wenn Sie alternative Bedingungen angeben möchten, wie z. B. die folgende:
6) Bundesland = „Hessen“ or Bundesland = „Bayern“ Alle Datensätze, die diese Bedingung erfüllen und eines der beiden Länder aufweisen, werden akzeptiert.
Selbstverständlich können auch numerische Tests eingesetzt werden. Beispiel: 7) Fläche > 40 or Wert > 250000 Hiermit wird getestet, ob die Fläche größer als „40“ oder der Wert größer als „250000“ ist. Wenn ein Datensatz eine dieser Bedingungen erfüllt, wird er für die Auswahl akzeptiert.
Bei der Formulierung von Ausdrücken mithilfe logischer Operatoren müssen Sie auf ihre Verwendung achten. Der folgende Ausdruck scheint zwar einwandfrei zu sein, funktioniert aber nicht: 8) Bundesland = „Hessen“ or „Bayern“ Ausgehend von der deutschen Übersetzung (Bundesland entspricht Hessen oder Bayern) sollte dieser Ausdruck ebenso funktionieren wie Ausdruck 6 und alle Datensätze zurückgeben, die entweder Hessen oder Bayern enthalten.
Allerdings unterscheiden sich die Regeln der Computerlogik in gewisser Hinsicht von denen der deutschen Sprache. Wenn MapInfo Pro Ausdrücke liest, so geschieht dies von links nach rechts. Dabei wird unter anderem berücksichtigt, wie die einzelnen Elemente des Ausdrucks gruppiert sind. Stellen Sie sich diesen Vorgang so vor, dass in den Ausdruck Klammern eingefügt werden. MapInfo Pro liest Ausdruck 5 so, als ob er wie Ausdruck 9 gruppiert wäre, was der gewünschten Interpretation entspricht.
Dahingegen wird Ausdruck 8 so gelesen, als ob er wie Ausdruck 4 gruppiert wäre, was ganz und gar nicht beabsichtigt war.
9) (Bundesland = „Hessen“) or (Bundesland = „Bayern“) 10) (Bundesland = „Hessen“) or („Bayern“) Die erste Klausel von Ausdruck 9 und 10 ist identisch. Die zweite Klausel (nach dem „or“) ist hingegen unterschiedlich. Die zweite Klausel von Ausdruck 10 ist nichts anderes als eine literale Zeichenfolge namens „Bayern“. Konventionsgemäß bewertet MapInfo Pro einen Datensatz gegenüber einer literalen Zeichenfolge als wahr, sofern dieser Datensatz nicht leer ist. Wenn MapInfo Pro Datensätze hinsichtlich Ausdruck 10 bewertet, gelten alle nicht leeren Datensätze als wahr und werden in die Auswahl übernommen. Dabei spielt es keine Rolle, wie ein Datensatz bei der ersten Klausel bewertet wird. Alle nicht leeren Datensätze werden bei der zweiten Klausel als wahr bewertet. Dies reicht bereits aus, um den gesamten Ausdruck als wahr zu bewerten.
Betrachten Sie ein letztes Beispiel, nämlich die Negierung von Ausdruck 6: 11) not (Bundesland =„ Bayern“ or Bundesland = „Hessen“) Ausdruck 9 wird erfüllt, wenn das Bundesland entweder Bayern oder Hessen ist, nicht aber, wenn es Sachsen oder Saarland ist. Ausdruck 11 wird erfüllt, wenn der Bezirk ein anderer als Bayern oder Hessen ist, einschließlich Sachsen und Saarland.
Numerische Klauseln Alle Datensätze, in denen das Haushalteinkommen mehr als 65000 € und das Durchschnittsalter 42 beträgt. 1) HH_Einkommen > 65000 and Round (DS_Alter, 1)= 42 Dieser Ausdruck besteht einfach aus zwei Klauseln. Diese Klauseln sind durch „and“ miteinander verbunden, d. h. ein Datensatz muss beide Klauseln erfüllen, damit er ausgewählt wird.
Alle Zeilen, in denen der Preis zwischen 50000 € und 100000 € liegt. 2) Preis >= 50000 and Preis <= 100000 Damit ein Datensatz ausgewählt wird, muss er beide Bedingungen erfüllen. Durch Verwendung der Operatoren „größer als oder gleich“ (>=) und „kleiner als oder gleich“ (<=) wird sichergestellt, dass auch Datensätze ausgewählt werden, deren Preis exakt 50.000 € bzw. 100.000 € entspricht. Wenn nur die Operatoren „größer als“ (>) und „kleiner als“ (<) verwendet werden, erfolgt die Auswahl für Preise zwischen 50.001 € und 99.999 €, nicht aber für 50.000 € oder 100.000 €.
Alle Zeilen mit einem Preis zwischen 50000 € und 100000 € oder zwischen 150000 € und 200000 €. 3) (Preis >= 50000 and PREIS <= 100000) or (Preis >= 150000 and Preis <= 200000) Dieser Ausdruck weist folgendes Format auf: (Ausdruck1) oder (Ausdruck2). Jeder dieser Ausdrücke hat dasselbe Format wie Ausdruck 2. Wenn eine Zeile die Bedingung von Ausdruck1 oder Ausdruck2 erfüllt, nimmt MapInfo Pro diese Zeile in die Auswahl auf.
Zeichenfolgenklauseln Alle Kunden von N bis Q. 4) Nachname >= „N“ and Nachname < „R“ Der erste Teil des Ausdrucks sucht nach Namen, die mit dem Buchstaben „N“ beginnen oder im Alphabet danach kommen. Der zweite Teil des Ausdrucks sucht nach Namen, die mit einem Buchstaben beginnen, der im Alphabet vor „R“ steht. Diese Bedingung wird von allen Namen mit dem Buchstaben N bis Q erfüllt.
Alle Kunden von N bis Z. Anmerkung: Die MapInfo Pro-Vergleichsoperatoren für Zeichenfolgen unterscheiden nicht zwischen Groß- und Kleinschreibung. 5) Nachname >= „N“ Da „Z“ der letzte Buchstabe im Alphabet ist, besteht kein Grund, für diese Bedingung einen Test durchzuführen. Es kann keine Kunden geben, deren Nachname mit einem Buchstaben hinter „Z“ beginnt.
Alle Kunden, deren Nachname mit C beginnt. 6) Nachname >= „C“ and Nachname < „D“ Die Logik dieses Ausdrucks ist dieselbe wie für Ausdruck 4.
Alle Kunden, deren Nachname zwischen „Ce . . .“ und „Cn . . ." 7) Nachname=>„Ce“ and Nachname < „Co“ Kommentar: Die Logik dieses Ausdrucks ist dieselbe wie für Ausdruck 6.
Alle, die nicht aus Bayern stammen. 8) not Bundesland = „Bayern“ Dieser Ausdruck veranlasst MapInfo Pro, den Inhalt der Spalte „Bundesland“ zu durchsuchen. Liegt ein Eintrag vor, der anders lautet als „Bayern“, wird die Zeile ausgewählt.
Datumsklauseln Datensätze für alle Einträge, die im August 2016 eingegangen sind. Month(Auftragseingang) = 8 and Year(Auftragseingang) = 2016 In diesem Ausdruck wird das Jahr explizit angegeben, wobei mit der Funktion „year(<beliebigeSpalte>)“ das Jahr aus dem Datum extrahiert wird.
Auftragseingang >= „01.08.2016“ and Auftragseingang <= „31.08.2016“ In diesem Ausdruck wird nicht speziell nach einem Monat oder einem Jahr gefragt. Stattdessen wird ein Ausdruck verwendet, der im Deutschen treffender wie folgt formuliert werden könnte: Datensätze für alle Einträge, die am oder nach dem 1. August 2016 und am oder vor dem 31. August 2016 eingegangen sind. Beide Ausdrücke bringen zwar gleiche Ergebnisse hervor, werden aber unterschiedlich formuliert.
Datensätze für alle Einträge, die im Juli oder September eingegangen sind. Month(Auftragseingang) = 7 or Month(Auftragseingang) = 9 Wie zuvor wird auch hier kein Jahr angegeben. Je nachdem, welche Daten Ihre Relation enthält und was Sie erreichen möchten, kann dies u. U. ein Problem darstellen.
Falls Sie das Jahr angeben möchten: Datensätze für alle Einträge, die im Juli oder September 2016 eingegangen sind. month(Auftragseingang) = any(7, 9) and year(Auftragseingang) = 2016 Die erste Klausel dieses Ausdrucks verwendet das Schlüsselwort „any“. Die erste Klausel wird erfüllt, wenn eines der Elemente in Klammern mit dem Eingangsmonat übereinstimmt, d. h. in diesem Fall „Juli“ und „September“.
|