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.
SQL
ALTER TABLE Fahrrad
ADD COLUMN Anschaffungskosten DECIMAL(7,2)
AFTER Kennung;
Abb. 3-69: SQL-Anweisung
Anschaffungskosten erfassen
SQL
UPDATE Fahrrad
SET Anschaffungskosten = 670
WHERE ID = 1;
Abb. 3-70: SQL-Anweisung
SQL
UPDATE Fahrrad
SET Anschaffungskosten = 750
WHERE ID = 2;
Abb. 3-71: SQL-Anweisung

Tabelle Fahrrad

ID Kennung Anschaffungskosten
1 Cross#7 670.00
2 Mark#2 750.00
Abb. 3-72: Tabelle Fahrrad, erweitert um die Spalte Anschaffungskosten.

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:

SQL
SELECT ID, Kennung, Anschaffungskosten, Anschaffungskosten*1.19 AS Brutto_AK
FROM Fahrrad;
Abb. 3-73: SQL – Berechnete Spalte

Abfrageergebnis

ID Kennung Anschaffungskosten Brutto_AK
1 Cross#7 670.00 797.3000
2 Mark#2 750.00 892.5000
Abb. 3-74: Abfrageergebnis der SQL-Anweisung aus Abb. 3-72.

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.

SQL
SELECT ID, Kennung, Anschaffungskosten, Anschaffungskosten*1.19 AS Brutto_AK
FROM Fahrrad
WHERE Anschaffungskosten*1.19 > 800;
Abb. 3-75: SQL – Berechnete Spalte

Abfrageergebnis

ID Kennung Anschaffungskosten Brutto_AK
2 Mark#2 750.00 892.5000
Abb. 3-76: Abfrageergebnis der SQL-Anweisung aus Abb. 3-75.
Aufgabe

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:

  1. 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
    SQL
    SELECT Hersteller, Bezeichnung, Verbrauch, Verbrauch*1.1 AS Sportlich, Verbrauch*0.9 AS Sparend
    FROM Fahrzeugmodell;
    Abb. 3-77: SQL-Anweisung
  2. 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
    SQL
    SELECT 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
  3. 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
    SQL
    SELECT 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
  1. Gewünscht wird eine Übersicht aller Mietverträge, die im Jahr 2015 abgeschlossen wurden.

    SQL
    SELECT *
    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.
  2. Gewünscht wird eine Übersicht aller Mietverträge, die im aktuellem Jahr abgeschlossen wurden.

    SQL
    SELECT *
    FROM Mietvertrag
    WHERE YEAR(Abschlussdatum) = YEAR(CURRENT_DATE());
    Abb. 3-79d: SQL-Funktion CURRENT_DATE
  3. Gewünscht wird eine Übersicht aller Mietverträge, die jeweils im August abgeschlossen wurden.

    SQL
    SELECT *
    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

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:

  1. Eine Übersicht aller Reservierungen, die im 1. Halbjahr des aktuellen Jahres beginnen. Lösung
    Lösung
    SQL
    SELECT *
    FROM Reservierung
    WHERE MONTH(Beginn) BETWEEN 1 AND 6 AND YEAR(Beginn)=YEAR(CURRENT_DATE());
    Abb. 3-79g: SQL-Anweisung