Reihenfolge der SQL-Operationen

Wenn du in der WHERE-Bedingung mit einer Kombination von AND, OR und NOT Operationen arbeitest, kann es zu sehr verschiedenen Ergebnissen kommen, je nachdem wie und ob du Klammern setzt. Um das korrekte Ergebnis bei deiner SQL-Abfrage zu erhalten, ist es wichtig die Reihenfolge der Operationen zu verstehen. Für die logischen Operatoren AND, OR und NOT gilt folgende Priorität:

  • NOT   Hat die höchste Priorität und wird vorrangig ausgewertet
  • AND    Hat die nächsthöchste Priorität und wird danach ausgewertet
  • OR      Hat die schwächste Priorität und wird zuletzt ausgewertet

Du kannst die Reihenfolge der Vorgänge steuern, indem du Klammern setzt und die Operationen gruppierst. Alle Elemente in einer Gruppe werden vorrangig überprüft. Daher ist es hilfreich, an allen sinnvollen Stellen Klammern zu setzen, auch dort, wo sie nicht erforderlich sind.

Beispiel einer Datenbankabfrage ohne Klammern: WHERE A AND B OR C

SELECT first_name, last_name FROM actor WHERE first_name = ‚BEN‘ AND last_name = ‚Harris‘ OR first_name = „CAMERON“;

Da das AND zuerst wirkt, entspricht diese Abfrage ohne Klammern der folgenden Abfrage mit Klammern = WHERE (A AND B) OR C

SELECT first_name, last_name FROM actor WHERE (first_name = ‚BEN‘ AND last_name = ‚Harris‘) OR first_name = „CAMERON“;

Möchtest du allerdings, dass die OR-Bedingung vorrangig behandelt wird, musst du die Klammern zwingend setzen: WHERE A AND (B OR C)

SELECT first_name, last_name FROM actor WHERE first_name = ‚BEN‘ AND (last_name = ‚Harris‘ OR first_name = „CAMERON“);

Da die OR-Abfrage folgende Datensätze ausgibt und davon nur der Datensatz mit Vornamen Ben ausgewählt wird, haben wir nur einen Datensatz selektiert.

Betrachten wir den NOT-Operator: Dieser wirkt wie oben beschrieben immer mit höchster Priorität, sodass die folgende Abfrage ohne Klammern WHERE NOT A AND B ein anderes Ergebnis liefert, als die Bedingung mit Klammern, wodurch das AND zuerst wirkt: WHERE NOT (A AND B)

SELECT first_name, last_name FROM actor WHERE NOT first_name = ‚BEN‘ AND last_name = ‚Harris‘;

SELECT first_name, last_name FROM actor WHERE NOT (first_name = ‚BEN‘ AND last_name = ‚Harris‘);

Die Operation in den Klammern gibt BEN HARRIS aus und durch das NOT vor den Klammern werden anschließend alle Schauspieler außer BEN HARRIS ausgegeben:

(Visited 9.214 times, 4 visits today)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert