3.6 Berechnungen
Berechnete Spalten
Werte, die sich aus anderen in der Datenbank gespeicherten Werten berechnen lassen, werden selbst nicht gespeichert, sondern bei Bedarf berechnet.
Beispiel
Gewünscht wird eine Übersicht aller Fahrräder, die deren Kennung, Anschaffungskosten sowie Bruttoanschaffungskosten (Umsatzsteuersatz 19%) enthält.
[Hinweis: Für dieses Beispiel wurde die Tabelle Fahrrad um die Spalte Anschaffungskosten erweitert.]
Der Tabelle Fahrrad die Spalte Anschaffungskosten hinzufügen.
ADD COLUMN Anschaffungskosten DECIMAL(7,2)
AFTER Kennung;
Anschaffungskosten erfassen
SET Anschaffungskosten = 670
WHERE ID = 1;
SET Anschaffungskosten = 750
WHERE ID = 2;
Tabelle Fahrrad
| ID | Kennung | Anschaffungskosten |
|---|---|---|
| 1 | Cross#7 | 670.00 |
| 2 | Mark#2 | 750.00 |
Die Bruttoanschaffungskosten lassen sich aus den in der Tabelle Fahrrad gespeicherten Anschaffungskosten berechnen und in einer eigenen Spalte ausgeben. Dazu wird in der SELECT-Abschnitt die entsprechende Berechnungsformel angegeben. Daran schließen sich das Schlüsselwort AS und die gewünschte Spaltenüberschrift an:
FROM Fahrrad;
Abfrageergebnis
| ID | Kennung | Anschaffungskosten | Brutto_AK |
|---|---|---|---|
| 1 | Cross#7 | 670.00 | 797.3000 |
| 2 | Mark#2 | 750.00 | 892.5000 |
Berechnungen in Bedingungen
Da die Auswertung einer SQL-Anweisung in der Reihenfolge FROM, WHERE, GROUP BY, SELECT, HAVING, ORDER BY erfolgt, kann ein im SELECT-Abschnitt definierter Spaltenname nur im HAVING- und ORDER BY-Abschnitt verwendet werden. Wird das Ergebnis zum Beispiel in der SELECT- oder WHERE-Abschnitt benötigt, muss es dort erneut berechnet werden.
Beispiel
Gewünscht wird eine Übersicht aller Fahrräder, deren Bruttoanschaffungskosten über 800,00 EUR liegen. Die Übersicht soll die die Kennung, die Anschaffungskosten sowie die Bruttoanschaffungskosten (Umsatzsteuersatz 19%) der jeweiligen Fahrräder enthalten.
FROM Fahrrad
WHERE Anschaffungskosten*1.19 > 800;
Abfrageergebnis
| ID | Kennung | Anschaffungskosten | Brutto_AK |
|---|---|---|---|
| 2 | Mark#2 | 750.00 | 892.5000 |
Aufgabe 3-11: Berechnete Spalten und Berechnungen in Bedingungen
Datenbank Firmenwagen
Erstellen Sie jeweils eine SQL-Anweisung, die als Abfrageergebnis eine Tabelle mit den gewünschten Daten zurückgibt:
-
Eine Übersicht aller Fahrzeugmodelle, die für jedes Modell den Hersteller, die Modellbezeichnung und Verbrauch angibt. Außerdem soll der Verbrauch bei sportlicher Fahrweise (+10%) und bei spritsparender Fahrweise (-10%) ersichtlich sein.
Lösung
Lösung
SQLSELECT Hersteller, Bezeichnung, Verbrauch, Verbrauch*1.1 AS Sportlich, Verbrauch*0.9 AS Sparend
FROM Fahrzeugmodell;Abb. 3-77: SQL-Anweisung -
Eine Übersicht aller Fahrzeuge, die für jedes Fahrzeug das Kennzeichen, den Hersteller, das Modell und die Anschaffungskosten angibt. Außerdem sollen die Anschaffungskosten umgerechnet in US-Dollar (Kurs: € 1,00 = $1,20) ersichtlich sein.
Lösung
Lösung
SQLSELECT Kennzeichen, Hersteller, Bezeichnung, Anschaffungskosten, Anschaffungskosten*1.2 AS AK_Dollar
FROM Fahrzeug INNER JOIN Fahrzeugmodell ON Fahrzeugmodell_ID = Fahrzeugmodell.ID;Abb. 3-78: SQL-Anweisung -
Eine Übersicht aller Versicherungsverträge, die für jeden Vertrag die Versicherungsnummer, den Namen der Versicherungsgesellschaft sowie den Beitrag abzüglich eines Rabatts von 2,25 % angibt. Außerdem soll ersichtlich sein, welchen Kaskoschutz der Vertrag beinhaltet.
Lösung
Lösung
SQLSELECT VersNr, Firma, Beitrag*0.9775 AS BeitragRabattiert, Kasko
FROM Versicherungsvertrag INNER JOIN Versicherungsgesellschaft ON Gesellschaft_ID = Versicherungsgesellschaft.ID;Abb. 3-79: SQL-Anweisung
Funktionen
Im SQL-Standard werden verschiedene Funktionen festgelegt, die auf einzelne Zahlen, Zeichenketten oder Datums- und Zeitwerten angewendet werden können.
Beispiele
-
Gewünscht wird eine Übersicht aller Mietverträge, die im Jahr 2015 abgeschlossen wurden.
SQLSELECT *
FROM Mietvertrag
WHERE YEAR(Abschlussdatum) = 2015;Abb. 3-79b: SQL-Funktion YEAR Abfrageergebnis
ID Abschlussdatum Mietbeginn Mietdauer ↑Kunde_ID 1 2015-08-11 2015-08-12 3 1 2 2015-08-13 2015-08-15 5 2 Abb. 3-79c: Abfrageergebnis der SQL-Anweisung aus Abb. 3-79b. -
Gewünscht wird eine Übersicht aller Mietverträge, die im aktuellem Jahr abgeschlossen wurden.
SQLSELECT *
FROM Mietvertrag
WHERE YEAR(Abschlussdatum) = YEAR(CURRENT_DATE());Abb. 3-79d: SQL-Funktion CURRENT_DATE -
Gewünscht wird eine Übersicht aller Mietverträge, die jeweils im August abgeschlossen wurden.
SQLSELECT *
FROM Mietvertrag
WHERE MONTH(Abschlussdatum) = 8;Abb. 3-79e: SQL-Funktion MONTH Abfrageergebnis
ID Abschlussdatum Mietbeginn Mietdauer ↑Kunde_ID 1 2015-08-11 2015-08-12 3 1 2 2015-08-13 2015-08-15 5 2 Abb. 3-79f: Abfrageergebnis der SQL-Anweisung aus Abb. 3-79e.
Aufgabe 3-11-II: Berechnungen mit Funktionen
Datenbank Firmenwagen
Erstellen Sie jeweils eine SQL-Anweisung, die als Abfrageergebnis eine Tabelle mit den gewünschten Daten zurückgibt:
-
Eine Übersicht aller Reservierungen, die im 1. Halbjahr des aktuellen Jahres beginnen.
Lösung
Lösung
SQLSELECT *
FROM Reservierung
WHERE MONTH(Beginn) BETWEEN 1 AND 6 AND YEAR(Beginn)=YEAR(CURRENT_DATE());Abb. 3-79g: SQL-Anweisung