Erste Seite Zurück Weiter Letzte Seite Übersicht Grafik

Logische Operatoren


Notizen:

Oftmals muss ein Datensatz mehreren Bedingungen genügen, um ins Ergebnis „durchgelassen“ zu werden: Alle Kunden aus St.Pölten mit einem Umsatz von mehr als €1000 sind eigentlich zwei Bedingungen:
SELECT * FROM Kunden WHERE PLZ = 3100 liefert die St.Pöltner Kunden,
SELECT * FROM Kunden WHERE Umsatz > 1000 diejenigen mit mehr als €1000 Umsatz
Sollen beide Bedingungen gelten, lassen sich diese in einem SELECT-Statement durch AND miteinander verknüpfen:
... WHERE PLZ = '1010' AND Geschlecht = 'M'
Ganz analog existiert auch ein Operator OR (Datensatz muss mindestens eine Bedingung erfüllen)
... WHERE Land = 'A' OR Land = 'D' OR Land = 'CH'
liefert also alle Datensätze aus Österreich, der Schweiz und Deutschland. Beachten Sie, wie das logische AND und OR dem natürlichsprachlichen zuwiderlaufen!
Kompliziert wird es außerdem, wenn AND und OR in einer WHERE-Klausel gemischt vorkommen: Es gilt eine sog. „Operator-Präzedenz“, d.h. die Operatoren werden in einer definierten Reihenfolge nacheinander abgearbeitet, im Falle von AND und OR „bindet“ der AND-Operator stärker als der OR-Operator und wird somit zuerst ausgeführt:
... WHERE Geschlecht = 'M' AND PLZ = '1010' OR PLZ = '1020'
wird also ausgeführt, als ob hier
... WHERE (Geschlecht = 'M' AND PLZ = '1010') OR PLZ = '1020'
stünde und nicht wie vermutlich beabsichtigt
... WHERE Geschlecht = 'M' AND (PLZ = '1010' OR PLZ = '1020')
vgl. Arithmetik: 'Punktrechnung-vor-Strichrechnung': 5+3x2 ist nicht dasselbe wie (5+3)*2

Beachte: Ein geeigneter Operator „versteckt“ manchmal dieses Problem: ... WHERE Land IN ('A', 'D') AND Zuname = 'Müller'
NOT (Bedingung wird negiert)
... WHERE NOT (Land = 'A' OR Land = 'D') liefert die Datensätze aus anderen Ländern als Österreich und Deutschland.
Anm.: Wie in allen Systemen, die mit logischen Operatoren umgehen, gelten natürlich auch in SQL die DeMorgan'schen Umformungsregeln (A & B stehen hier für ganze Bedingungen):
NOT A AND NOT B <=> NOT ( A OR B )
NOT A OR NOT B <=> NOT A AND B
Das kann beim Programmieren sehr praktisch sein!