Business und Internet - WS 2009/10
Donnerstag, 20. März 2008
SQL ist SUPER
christian.weinzinger.Uni-Linz, Donnerstag, 20. März 2008, 07:30
Der folgende Beitrag deckt die 2. Aufgabe der Vorlesung IV 2 ab.
Es sollen auf einem Web-Datenbank SQL abfragen durchgeführt werden. Diese Abfragen sollen beschrieben werden und die entsprechenden SQL statements sollen auch veröffentlicht werden.
Anbei meine Einfälle für Abfragen inkl. entsprechender Dokumentation.

1. Um einen ersten groben Überlblick zu erhalten werde ich als erstes einmal abfragen wieviele Kunden überhaupt in der Datenbank sind. Das heißt wieviele Kunden hab ich (als Unternehmen).

Das funktioniert folgender Maßen:

SELECT COUNT(*) FROM Kunde


2. Da ich jetzt einmal weiß wieviele Kunden ich hab, möchte ich als nächstes wissen welche Kunden mehr als 5 Bestellungen offen haben. Mit dieser Information kann ich meine Logistik und mein Bestellwesen entsprechend steuern und so versuchen eine möglichst kurze Durchlaufzeit von Bestellungen zu erreichen, damit die Kunden nicht ewig auf die Bestellung warten müssen

Ich habe die Info mit folgender SQL-Anweisung aus der Datenbank ausgelesen:

SELECT Kunde.Nr, Kunde.Vorname, Kunde.Nachname, COUNT(Auftrag.Nr) AS Anzahl
FROM Kunde, Auftrag
WHERE Kunde.Nr=Auftrag.Kundennummer
GROUP BY Kunde.Nr
HAVING(Anzahl) > 5


3. Meine nächste Abfrage beschäftigt sich damit welcher Verlag wie viele Bücher zur Verfügung stellen kann. Dabei sollen die Bücher, die der Verlag im Programm hat aufsummiert werden (Anzahlen). Diese sollen dann absteigend (die größte Anzahl zuerst) ausgegeben werden. Somit kann man feststellen welcher Verlag der am stärksten vertretene ist.
Es sollen Name (LangName) des Verlags plus die Anzahl der Bücher ausgegeben werden.

Das ensprechende Statement für diese Aufgabe ist:

SELECT Verlag.Name AS Verlag, COUNT(Buch.Nr) AS Anzahl_Buecher
FROM Buch, Verlag
WHERE Buch.Verlag = Verlag.Kurzbezeichnung
GROUP BY Verlag
ORDER BY Anzahl_Buecher DESC


4. Als nächstes möchte ich die größten Kunden wissen, die uns aktuell Bestellungen (Aufträge) gegeben haben. Dabei sollen die Kundennummer, Name , Summe der bestellten Bücher und Auftragssumme (Buch*Preis) der Bestellungen ausgegeben werden.
Es werden vorerst einmal alle Kunden ausgegeben, deren Auftragswert über EUR 100.000,00 ist. Mit dieser Abfrage kann ein eventuelle Klumpenrisiko ermittelt werden. (Ein Klumpenrisiko zeigt jene Kunden , die eine sehr große Auftragssumme offen haben. Damit kann man sehen, bei welchen Kunden es besonders wichtig ist, dass sie nicht ausfallen)

Folgendes Statement liefert das entsprechende Ergebnis:

SELECT Kunde.Nr, Kunde.Vorname, Kunde.Nachname, SUM(Auftragspos.Menge) AS Summe_Buecher, SUM(Buch.Preis*Auftragspos.Menge) AS Auftragssumme
FROM Kunde, Auftrag, Auftragspos, Buch
WHERE Kunde.Nr=Auftrag.Kundennummer
AND Auftrag.Nr=Auftragspos.Auftragsnummer
AND Auftragspos.Buchnummer=Buch.Nr
GROUP BY Kunde.Nr
HAVING Auftragssumme > 100000
ORDER BY Auftragssumme DESC


5. Welcher Kunde hat Bücher bestellt, die nicht auf Bestand sind oder auslaufen und der Kunde mehr bestellt hat als auf Lager sind. Diesen Kunden muss natürlich eine Nachricht geschrieben werden, in der sie darauf aufmerksam gemacht werden, dass die Bücher nicht mehr (zur Gänze) oder mit Verspätung lieferbar sind.

Statement:

SELECT Kunde.Nr AS KNr, Kunde.Nachname, Auftrag.Nr AS Auftrag, Buch.Nr AS BuchNr, Buch.Titel, Buch.Auslaufend, Buch.Bestand, Auftragspos.Menge
FROM Kunde, Auftrag, Auftragspos, Buch
WHERE Kunde.Nr=Auftrag.Kundennummer
AND Auftrag.Nr=Auftragspos.Auftragsnummer
AND Auftragspos.Buchnummer=Buch.Nr
AND (Buch.Bestand=0
OR (Auftragspos.Buchnummer=Buch.Nr
AND Buch.Auslaufend="y"
AND Auftragspos.Menge > Buch.Bestand))


6. Als letztes möchte ich wissen bei welchen Büchern ich generell einen Engpass habe (Aber nur bei jenen Büchern, die auslaufen). In der letzten Abfrage sind Bücher durch den Rost gefallen, wo Kunden zwar weniger als die auf Bestand liegenden bestellt haben, in Summe über alle Bestellungen aber auch mehr Bücher bestellt wurden als auf Lager sind.

Die Engpässe ermittle ich mit folgender Anweisung:

SELECT Buch.Nr, Buch.Titel, Buch.Bestand, Buch.Auslaufend, SUM(Auftragspos.Menge) AS Menge_Bestellung
FROM Auftragspos, Buch
WHERE Auftragspos.Buchnummer=Buch.Nr AND Buch.Auslaufend="y"
GROUP BY Buch.Nr
HAVING(Menge_Bestellung)>Buch.Bestand

Permalink (0 Kommentare)   Kommentieren



... ältere Einträge