Klammern und NOT
Wenn eine Bedingung sowohl AND als auch OR enthält, kommt es darauf an, welches zuerst gilt. Angenommen, du willst die Sport- oder Rennspiele, die weniger als 20 € kosten, und schreibst:
SELECT titel, genre, preis
FROM spiele
WHERE genre = 'Sport' OR genre = 'Rennspiel' AND preis < 20
ORDER BY titel;| titel | genre | preis |
|---|---|---|
| Goal Rush | Sport | 50 |
| Ice Hockey Pro | Sport | 45 |
| Pixel Racer | Rennspiel | 15 |
Goal Rush kostet 50 €, warum ist es dabei? AND geht vor OR, so wie in der Mathematik die Multiplikation vor der Addition geht. SQLite verbindet zuerst genre = 'Rennspiel' AND preis < 20 und fügt erst dann OR genre = 'Sport' hinzu. Die Abfrage hat also die Rennspiele unter 20 € gefunden und alle Sportspiele, egal was sie kosten.
Damit OR zuerst gilt, setze es wie in der Mathematik in Klammern:
SELECT titel, genre, preis
FROM spiele
WHERE (genre = 'Sport' OR genre = 'Rennspiel') AND preis < 20
ORDER BY titel;| titel | genre | preis |
|---|---|---|
| Pixel Racer | Rennspiel | 15 |
Jetzt muss jedes Spiel ein Sport- oder ein Rennspiel sein und außerdem weniger als 20 € kosten. Immer wenn eine Bedingung AND und OR mischt, verwende Klammern: Du musst dir nicht merken, was zuerst gilt, und wer die Abfrage liest, sieht sofort, was du gemeint hast.
NOT vor einer Bedingung dreht sie um: Es ist wahr, wo die Bedingung falsch ist, und umgekehrt. NOT preis < 20 ist dasselbe wie preis >= 20. Am nützlichsten ist es vor Klammern, wo es die ganze Bedingung darin umdreht. Die Spiele, die weder Sport- noch Rennspiele sind:
SELECT titel, genre
FROM spiele
WHERE NOT (genre = 'Sport' OR genre = 'Rennspiel')
ORDER BY titel;| titel | genre |
|---|---|
| Bakery Story | Simulation |
| Castle Siege | Strategie |
| Cube Logic | Puzzle |
| … | … |
Ohne die Klammern würde NOT nur die erste Bedingung umdrehen: NOT genre = 'Sport' OR genre = 'Rennspiel' findet alle Spiele, die keine Sportspiele sind, die Rennspiele eingeschlossen.
So schreibst du es:
Anweisungen
- 1
Die Abfrage im Editor sollte die bezahlten Bestellungen der Kunden mit der ID 6 und 8 zeigen, zeigt aber auch eine erstattete Bestellung. Füge Klammern hinzu, sodass sie nur die bezahlten Bestellungen dieser beiden Kunden zeigt:
id kunde_id status 10 8 bezahlt 12 6 bezahlt 25 6 bezahlt - 2
Füge darunter eine Abfrage für eine Seite für ältere Spieler hinzu: jedes Spiel außer den billigen Spielen für kleine Kinder. Die billigen Spiele für kleine Kinder sind die, die ab 3 Jahren geeignet sind und weniger als 20 € kosten. Schreibe diese Bedingung in Klammern und drehe sie mit
NOTum. Zeige den Titel, die Altersfreigabe und den Preis, sortiert nach dem Preis und dann nach dem Titel. Das Ergebnis beginnt so:titel altersfreigabe preis Word Quest 7 10 Ocean Deep 7 15 Lost Temple 12 20 Moon Farm 3 20 … … …