Skript: Datenbanken und SQL mit der Warenautomat-Datenbank
10. Rechenoperatoren in SQL und Aliase
Nachdem die Grundabfragen stehen, kann man Ergebnisse direkt berechnen und lesbarer benennen. Genau dafür dienen Rechenoperatoren und Aliase.
10.1 Rechnen in Abfragen
Mit Rechenoperatoren kann man Werte direkt in einer Abfrage berechnen. Das ist nützlich für Bestandsrechnungen, Preise, Rabatte oder Zwischensummen.
Wichtige Rechenoperatoren:
+Addition-Subtraktion*Multiplikation/Division
[!NOTE] Beispiele:
SELECT name, preis_eur, preis_eur * 3 AS dreifacher_wert FROM produkt; SELECT fachnummer, aktueller_bestand, aktueller_bestand - 2 AS restbestand FROM inventar;
Operator-Reihenfolge:
- Klammern
() - Multiplikation/Division
*,/ - Addition/Subtraktion
+,-
[!NOTE] Beispiel:
preis_eur * 1.19 - 0.50ist nicht dasselbe wiepreis_eur * (1.19 - 0.50).- Bei gemischten Rechenwegen immer Klammern setzen.
10.2 Aliase
Aliase geben Spalten oder Tabellen lesbarere Namen. Besonders bei Berechnungen machen sie Ergebnisse verständlich.
[!NOTE] Beispiele:
SELECT name, preis_eur, preis_eur * 0.90 AS rabattpreis FROM produkt; SELECT a.seriennummer, i.aktueller_bestand AS bestand FROM inventar i JOIN automat a ON a.automat_id = i.automat_id;
10.3 Ausdrücke mit Berechnung
Berechnungen sind besonders nützlich bei Mengen, Bestandswerten oder Rabatten.
Typische Muster:
- Prozentrechnung (Rabatt/Steuer)
- Gesamtwert = Menge * Einzelpreis
- Differenzrechnung (Soll-Ist)
[!NOTE] Beispiel Gesamtwert je Fach:
SELECT i.automat_id, i.fachnummer, i.aktueller_bestand, p.preis_eur, i.aktueller_bestand * p.preis_eur AS fachwert_eur FROM inventar i JOIN produkt p ON p.produkt_id = i.produkt_id;
Rundung in SQL:
ROUND(x, 2)rundet auf zwei Nachkommastellen.CEIL(x)rundet auf die nächste ganze Zahl auf.FLOOR(x)rundet auf die nächste ganze Zahl ab.
[!NOTE] Beispiel:
SELECT name, preis_eur, ROUND(preis_eur * 1.19, 2) AS bruttopreis FROM produkt;
Umgang mit NULL bei Berechnungen:
- Jede Rechnung mit
NULLergibt meistNULL. - Mit
COALESCEkann ein Ersatzwert gesetzt werden.
[!NOTE] Beispiel:
SELECT produkt_id, COALESCE(rabatt_prozent, 0) AS rabatt, preis_eur * (1 - COALESCE(rabatt_prozent, 0) / 100) AS preis_nach_rabatt FROM produkt;
10.4 Typische Rechenfehler
- Fehlende Klammern bei gemischten Operationen.
- Vergessenes
COALESCEbei möglichenNULL-Werten. - Ungerundete Geldbeträge bei Ausgaben/Reports.
- Falsche Prozentlogik (z. B.
preis * 20stattpreis * 0.20).
Querverweise
Übungen zum Kapitel
Übung 1: Berechne den Gesamtwert eines Produkts mit dem Preis mal 3.
Lösung
**Lösung:** ```sql SELECT name, preis_eur, preis_eur * 3 AS dreifacher_wert FROM produkt; ```Übung 2: Gib preis_eur als preis aus.
Lösung
**Lösung:** ```sql SELECT name, preis_eur AS preis FROM produkt; ```Übung 3: Berechne den Restbestand nach einem Verkauf von 2 Stück bei einem Bestand von 7.
Lösung
**Lösung:** ```sql SELECT 7 - 2 AS bestand_nach_verkauf; ```Übung 4: Berechne für alle Produkte einen Bruttopreis mit 19% MwSt., gerundet auf 2 Nachkommastellen.
Lösung
**Lösung:** ```sql SELECT produkt_id, name, preis_eur, ROUND(preis_eur * 1.19, 2) AS bruttopreis FROM produkt; ```Übung 5: Warum ist COALESCE bei Rechnungen mit optionalen Werten nützlich?
Lösung
**Lösung:** Weil `NULL` sonst die gesamte Rechnung zu `NULL` macht. Mit `COALESCE` kann ein sinnvoller Ersatzwert (z. B. `0`) verwendet werden.Übung 6: Welche Rechnung ist korrekt für 20% Rabatt auf preis_eur?