Rechnen in Abfragen
Eine Abfrage kann mehr zeigen, als in der Tabelle steht. Nach SELECT kannst du eine Rechnung schreiben, und die Datenbank rechnet sie für jede Zeile aus. Was würden die Spiele in einer Aktion mit 5 € Rabatt auf jedes kosten?
SELECT titel, preis, preis - 5
FROM spiele;| titel | preis | preis - 5 |
|---|---|---|
| Dragon Forge | 40 | 35 |
| Pixel Racer | 15 | 10 |
| Moon Farm | 20 | 15 |
| … | … | … |
Du kannst addieren (+), subtrahieren (-), multiplizieren (*) und dividieren (/). Eine Rechnung kann eine Spalte und eine Zahl verwenden, wie hier, oder mehrere Spalten: In positionen ist menge * preis das, was der Kunde für alle Exemplare eines Spiels bezahlt hat. Wie in der Mathematik gehen * und / vor + und -, und du kannst Klammern setzen: preis + 5 * 2 addiert 10 zum Preis, während (preis + 5) * 2 5 addiert und das Ergebnis verdoppelt. SQLite kann sogar ohne Tabelle rechnen: SELECT 7 * 6; zeigt 42.
Die berechnete Spalte steht nicht in der Tabelle, also hat sie keinen eigenen Namen. Das Ergebnis benennt sie nach der Rechnung, genau so, wie du sie getippt hast: preis - 5. Schreibst du preis-5 ohne Leerzeichen, heißt die Spalte preis-5. In der nächsten Übung lernst du, ihr einen besseren Namen zu geben.
Die Rechnung ändert nur, was die Abfrage zeigt. Die Tabelle bleibt, wie sie war: Nach dieser Abfrage kosten die Spiele genau das, was sie vorher gekostet haben. (Wie du die Daten in einer Tabelle änderst, lernst du später im Kurs.)
Zahlen mit Dezimalpunkt funktionieren auch: preis * 0.8 ist der Preis nach 20 % Rabatt. Das Ergebnis ist dann eine Dezimalzahl, und SQLite zeigt sie als 32.0 an, auch wenn sie ganz ist. Vorsicht beim Dividieren: Wenn beide Zahlen ganze Zahlen sind, ist auch das Ergebnis ganz, also ergibt 25 / 2 12 und nicht 12.5. Warum das so ist und was man dagegen tun kann, lernst du in der Lektion über Funktionen.
Typischer Fehler: mit x multiplizieren. In SQL ist das Zeichen für die Multiplikation wie in den meisten Programmiersprachen der Stern: preis * 2. SELECT titel, preis x 2 FROM spiele; endet mit dem Fehler near "2": syntax error, weil SQLite x als neuen Namen für die Spalte preis liest, genau wie beim fehlenden Komma in der ersten Lektion.
So schreibst du es:
Anweisungen
- 1
Zeige die ID der Bestellung, die ID des Spiels, die Menge und den Preis jeder Position in
positionenund in der letzten Spalte, was der Kunde für alle ihre Exemplare bezahlt hat: die Menge mal den Preis. Sortiere die Positionen nach der Menge, von der größten, und die Positionen mit derselben Menge nach der ID der Bestellung. Die ersten Zeilen sind die Positionen mit zwei Exemplaren. (Die letzte Spalte wird nach der Rechnung benannt, so wie du sie tippst, ihr Name kann also abweichen.)bestellung_id spiel_id menge preis menge * preis 6 2 2 15 30 15 11 2 25 50 22 14 2 30 60 … … … … … - 2
Zeige darunter die ID des Spiels, die ID des Kunden und die Sterne jeder Bewertung und in der letzten Spalte die Sterne als Punktzahl von 100: die Sterne mal 20. Sortiere die Bewertungen nach der ID des Spiels und die Bewertungen desselben Spiels nach der ID des Kunden:
spiel_id kunde_id sterne sterne * 20 1 1 4 80 1 2 5 100 1 5 3 60 … … … …