Logische Operatoren sind Tools, mit denen du Bedingungen in deinen Abfragen kombinieren kannst, um Daten noch gezielter zu filtern. Wahrscheinlich bist du ihnen schon in Programmiersprachen begegnet. Wenn man SQL-Abfragen mit einem Spamfilter im E-Mail-Postfach vergleicht, dann sind logische Operatoren wie die Regeln, nach denen Mails in den Ordner "Spam" oder im Ordner "Posteingang" landen.
SQL ist ein Tool, das oft für das Auswählen oder Analysieren von Daten genutzt wird. Logische Operatoren (AND, OR, NOT) helfen dir, mehrere Bedingungen in einer Abfrage zu kombinieren, damit du auch auf komplexere Fragen antworten kannst, wie zum Beispiel:
- Welche studenten sind älter als 18 und haben die Note "A"?
- Welche produkte gehören zur Kategorie "Elektronik" oder "Haushaltsgeräte"?
- Welche kunden haben keine Einkäufe gemacht?
Schauen wir uns die drei wichtigsten logischen Operatoren in SQL an:
AND: Beide Bedingungen müssen wahr sein.OR: Mindestens eine der Bedingungen muss wahr sein.NOT: Negiert (verneint) die Bedingung.
Operator AND: beide Bedingungen sind wahr
Mit dem AND-Operator kannst du sagen, dass beide Teile der Bedingung erfüllt sein müssen, damit eine Zeile im Ergebnis landet.
Syntax
SELECT spalte1, spalte2
FROM tabelle
WHERE bedingung AND bedingung2;
Beispiel 1: Studenten filtern, die älter als 18 sind und die Note "A" haben
Nehmen wir an, wir haben eine Tabelle students:
| id | name | age | grade |
|---|---|---|---|
| 1 | Alex | 20 | A |
| 2 | Maria | 19 | B |
| 3 | Otto | 17 | A |
| 4 | Anna | 22 | A |
Abfrage:
SELECT name, age, grade
FROM students
WHERE age > 18 AND grade = 'A';
Ergebnis:
| name | age | grade |
|---|---|---|
| Alex | 20 | A |
| Anna | 22 | A |
Beispiel 2: Mitarbeiter aus der Abteilung "HR" und mit Gehalt über 50000 filtern
SELECT name, department, salary
FROM employees
WHERE department = 'HR' AND salary > 50000;
Operator OR: mindestens eine Bedingung ist wahr
Der OR-Operator wird verwendet, wenn du Zeilen auswählen willst, die mindestens eine der Bedingungen erfüllen.
Syntax
SELECT spalte1, spalte2
FROM tabelle
WHERE bedingung OR bedingung2;
Beispiel 1: Studenten mit Note "A" oder "B" filtern
SELECT name, age, grade
FROM students
WHERE grade = 'A' OR grade = 'B';
Ergebnis:
| name | age | grade |
|---|---|---|
| Alex | 20 | A |
| Maria | 19 | B |
| Otto | 17 | A |
| Anna | 22 | A |
Beispiel 2: Produkte aus der Kategorie "Elektronik" oder mit Preis unter 100
Tabelle products:
| product_id | name | category | price |
|---|---|---|---|
| 1 | Fernseher | Elektronik | 300 |
| 2 | Bügeleisen | Haushaltsgeräte | 50 |
| 3 | Smartphone | Elektronik | 700 |
| 4 | Wasserkocher | Haushaltsgeräte | 80 |
SELECT name, category, price
FROM products
WHERE category = 'Elektronik' OR price < 100;
Ergebnis:
| name | category | price |
|---|---|---|
| Fernseher | Elektronik | 300 |
| Bügeleisen | Haushaltsgeräte | 50 |
| Wasserkocher | Haushaltsgeräte | 80 |
| Smartphone | Elektronik | 700 |
Operator NOT: Bedingung umkehren
Wenn AND und OR Bedingungen setzen, die erfüllt sein müssen, macht NOT genau das Gegenteil: Es wählt Zeilen aus, für die die angegebene Bedingung falsch ist.
Syntax
SELECT spalte1, spalte2
FROM tabelle
WHERE NOT bedingung;
Beispiel 1: Studenten filtern, die keine Note "A" haben
SELECT name, age, grade
FROM students
WHERE NOT grade = 'A';
Ergebnis:
| name | age | grade |
|---|---|---|
| Maria | 19 | B |
Beispiel 2: Produkte auswählen, die nicht zur Kategorie "Elektronik" gehören
SELECT name, category, price
FROM products
WHERE NOT category = 'Elektronik';
Kombination von logischen Operatoren
Du kannst logische Operatoren kombinieren, um noch komplexere Bedingungen zu bauen. Zum Beispiel, wenn du Studenten auswählen willst, die älter als 18 sind und die Note "A" oder "B" haben, kannst du AND und OR kombinieren.
Syntax mit Kombination
SELECT spalte1, spalte2
FROM tabelle
WHERE (bedingung1 AND bedingung2) OR bedingung3;
Beispiel: Studenten älter als 18 mit Note "A" oder Studenten mit Note "B"
SELECT name, age, grade
FROM students
WHERE (age > 18 AND grade = 'A') OR grade = 'B';
Ergebnis:
| name | age | grade |
|---|---|---|
| Alex | 20 | A |
| Anna | 22 | A |
| Maria | 19 | B |
Operator-Priorität
Wichtig zu wissen: SQL führt logische Operatoren in dieser Reihenfolge aus:
NOTANDOR
Du kannst Klammern benutzen, um die Reihenfolge zu ändern. Ohne Klammern kann das Ergebnis ganz anders sein, als du denkst!
Beispiel: Vergleich mit und ohne Klammern
Was passiert in dieser Abfrage?
SELECT name, age, grade
FROM students
WHERE age > 18 AND grade = 'A' OR grade = 'B';
Diese Abfrage wählt Studenten aus:
- Die älter als 18 sind und die Note "A" haben.
- Die die Note "B" haben.
Die Operator-Priorität führt zum gleichen Ergebnis wie mit Klammern:
SELECT name, age, grade
FROM students
WHERE (age > 18 AND grade = 'A') OR (grade = 'B');
Wenn du aber Klammern anders setzt:
SELECT name, age, grade
FROM students
WHERE age > 18 AND (grade = 'A' OR grade = 'B');
Jetzt werden nur Studenten ausgewählt, die älter als 18 sind und die Note "A" oder "B" haben. Klammern machen echt einen Unterschied!
Typische Fehler bei logischen Operatoren
- Klammern vergessen. Das kann zu unerwarteten Ergebnissen führen, besonders wenn du
ANDundORkombinierst. NOTbenutzen, ohne genau zu wissen, welche Zeilen ausgeschlossen werden.- Falsche Verwendung von logischen Operatoren. Zum Beispiel
ANDstattORoder umgekehrt. - Zu komplexe Bedingungen. Sehr lange Bedingungen mit mehreren
AND,OR,NOTohne Kommentare können schwer lesbar werden.
Diese Operatoren sind das Fundament für alle komplexen Abfragen. Jetzt bist du bereit, Abfragen zu schreiben, die nicht nur funktionieren, sondern auch genau das finden, was du brauchst!
GO TO FULL VERSION