Ausgewählte SQL-Abfragen
Für die Umstrukturierung des Buchhandelsgeschäfts hat der Geschäftsführer bereits eine Maßnahme getroffen und einen neuen Mitarbeiter, Hr. Schwarz, eingestellt. Hr. Schwarz war bis vor kurzem für ein namhaftes Buchhandelsgeschäft als Verkäufer und auch als Einkäufer tätig und besitzt somit über ein fundiertes Wissen in der Branche. Da er vor kurzem einen Einstiegskurs für SQL besucht hat, versucht er nun seine erlernten Kenntnisse anzuwenden.


Herr Schwarz möchte mit der folgenden Abfrage herausfinden, welche Verlage und somit Lieferanten in der Datenbank gelistet sind.

SELECT DISTINCT Verlag.Name
FROM Verlag



Als nächstes möchte Hr. Schwarz wissen, auf welche Verlage der aktuelle Lagerbestandswert entfällt.

SELECT Verlag.Name AS Verlagname,
SUM(Buch.Bestand*Buch.Preis) AS "Bestandswert"
FROM Verlag, Buch
WHERE Verlag.Kurzbezeichnung=Buch.Verlag
GROUP BY Verlag.Name
ORDER BY Bestandswert DESC



Herr Schwarz hat bei der vorherigen Abfrage festgestellt, dass die Oesterreichische BUNDESVERLAG Ges.m.b.H., Kurzbezeichnung "oev", einen sehr hohen Bestandswert am Lager ausweist und möchte deshalb wissen, welche Bücher des Verlages sich zu welchem Preis auf Lager befinden.

SELECT Buch.Titel, Buch.Preis
FROM Buch
WHERE Buch.Verlag LIKE 'oev'
ORDER BY Buch.Preis DESC



Da Herr Schwarz schon einige Informationen über den Lieferantenstamm gewonnen hat, beschließt er nun den Kundenstamm zu analysieren. Zu Beginn stellt sich für ihn die Frage - "Mit welchen Kunden macht das Unternehmen den größten Umsatz?"

SELECT Kunde.Nachname, Kunde.Vorname,
Kunde.Nr, SUM(Buch.Preis*Auftragspos.Menge) AS Gesamtumsatz
FROM Kunde, Auftrag, Auftragspos, Buch
WHERE Kunde.Nr=Auftrag.Kundennummer
AND Auftrag.Nr=Auftragspos.Auftragsnummer
AND Auftragspos.Buchnummer=Buch.Nr
GROUP BY Kunde.Nr



Herr Schwarz kommt seinem Ziel, einen kleinen Überblick über das Unternehmen zu bekommen, immer näher. Als nächstes ist er noch daran interessiert, wie sich der Gesamtumsatz auf die einzelnen Bundeländer verteilt und führt deshalb eine weitere Abfrage durch.

SELECT PLZ.Region
AS Bundesland, SUM(Auftragspos.Menge*Buch.Preis)
AS Gesamtumsatz
FROM PLZ, Kunde, Auftrag, Auftragspos, Buch
WHERE PLZ.Plz=Kunde.Plz
AND Kunde.Nr=Auftrag.Kundennummer
AND Auftrag.Nr=Auftragspos.Auftragsnummer
AND Auftragspos.Buchnummer=Buch.Nr
GROUP BY Bundesland
ORDER BY Gesamtumsatz DESC



Herr Schwarz weiß aus eigener Erfahrung, dass es zeitsparender und auch kostengünstiger ist, Bestellungen bei einer kleinen Anzahl von Lieferanten abzuwickeln. Darum legt er einen Ausdruck der folgenden Abfrage der Geschäftsführung vor. Die Liste beinhaltet jene Verlage, von denen ein Bestandswert von unter 10000 Euro auf Lager liegt. Herr Schwarz möchte, wenn von der Geschäftsführung genehmigt, die betroffenen Verlage aus der Lieferantenliste streichen.

SELECT Verlag.Name AS Verlagname,
SUM(Buch.Bestand*Buch.Preis) AS 'Bestandswert'
FROM Verlag, Buch
WHERE Verlag.Kurzbezeichnung=Buch.Verlag
GROUP BY Verlag.Name
HAVING Bestandswert<10000
ORDER BY Bestandswert DESC

Kommentieren




Hans.Mittendorfer.Uni-Linz, Freitag, 31. Oktober 2008, 16:46
nett und einfallsreich gemacht!

Aber wie erklären Sie sich die immensen Nachkommastellen bei den Umsätzen nach Bundesländern? Hinweis: Suchen Sie den Fehler nicht in Ihrer Abrage.

Wolfgang.Simetsberger.Uni-Linz, Freitag, 31. Oktober 2008, 18:12
Rein theoretisch ist es nicht möglich ein Ergebnis mit 2 Nachkommastellen zu bekommen. Da ich den Fehler nicht gefunden habe, führe ich die vielen Nachkommastellen auf einen Fehler in der Datenbank zurück.

reinhard.joechtl.Uni-Linz, Dienstag, 4. November 2008, 20:23
Für mich sieht das so aus, als würde die Summe über alle Bundesländer gerechnet und beim Teilen auf die einzelnen Bundesländer dann durch die Teilung auf 9 irgendwie eine Ungenauigkeit im Nachkommabereich auftritt. Der Fehler in Wien und Tirol deckt sich ja offensichtlich ab.

Kann es sein, dass man sich das so erklären kann?

Hans.Mittendorfer.Uni-Linz, Dienstag, 4. November 2008, 20:31
Es scheint sich tatsächlich um einen Rechen- bzw. Rundungsfehler zu handeln. Dieses Verhalten ist nicht neu und es ist auch nicht unsere Aufgabe ihn zu korrigieren, wichtig scheint jedoch, dass es Plausibilitätskontrollen gibt.

In meiner Schulausbildung wurden, in Anbetracht der damals noch spärlich - aber dennoch - vorhandenen Rechenmaschinen Schätzverfahren gelehrt, die vor dem Versagen der Maschinen schützen sollten. Dieses Grundprinzip gilt heute noch.

Mathematische Kuriositäten gibt es nicht nur im Bereich der Datenbanken, sondern auch bei Tabellenkalkulationswerkzeugen.

Quelle, aufgerufen am 4. Nov. 2008:
http://www.eastereggs.svensoltmann.de/content/view/649/26/