2a.
Welche Zahlungen hat der Kunde 'C001' geleistet?
Results
2b.
Zeige alle Lieferungen an den Kunden 'C001', nach dem Datum sortiert.
Results
Aufbereiten der Kontendaten
3a.
Erstelle eine Liste aller Produkte, die der Kunde 'C001' gekauft hat. Die Liste soll enthalten: Datum, Produktbeschreibung, Stückpreis, die versendete Menge und den Gesamtwert (quantity * price).
Results
3b.
Berechne den Gesamtwert aller Produkte, die an den Kunden 'C001' am 23. Juli 1998 versandt wurden. Hinweis: Lt. SQL-Standard wird das Datum so geschrieben: DATE '1998-07-23'
Results
3c.
Bereite eine Versandbestätigung für den Kunden 'C001' vor. Sie soll das Datum, den Hinweis 'Delivery' (Lieferung) und den Gesamtwert der versandten Produkte pro Tag enthalten.
Results
3d.
Erzeuge eine Empfangsbestätigung für den Kunden 'C001' vor. Es sollen das Datum, Anmerkungen (notes) und die empfangene Menge angezeigt werden.
Results
3e.
Um eine komplette Versand- und Empfangsbestätigung für den Kunden 'C001' aufzubereiten, ist der UNION-Operator zu verwenden. Die Bestätigung soll wie unten dargestellt aussehen. Anmerkung: Die unten gezeigten Werte sind nicht korrekt. Sie dienen nur als Beispiel. Für leere Werte kann '' oder NULL verwendet werden, wenn nötig auch 0.
Für die folgenen Aufgaben wird die VIEW Kontopositionen (accountline) benötigt. (Falls nicht verfügbar, bitte selbst erstellen.) Sie zeigt eine Zeile für jede Aus- oder Einzahlung. Geldausgänge (Schulden) sind negativ, Geldeingänge (Gutschriften) sind positiv dargestellt.
CREATE VIEW accountline AS
SELECT shipped.badguy AS badguy, shipped.sdate AS LineDate,
'Delivery' AS Legend, -[price]*[quantity] AS amount
FROM product, shipped
WHERE product.id = shipped.product
UNION
SELECT receipt.badguy, receipt.rdate,notes, amount
FROM receipt
ORDER BY linedate;
4a.
Erstelle eine Anweisung, die alle Kontopositionen zeigt.
Results
4b.
Erzeuge eine Liste der unbeglichenen Beträge für jeden Kunden.
Results
Was stimmt nicht mit dieser Datenbank?
Es gibt keinen Mechanismus, um Rücksendungen aufzuzeichnen. Welche Maßnahmen sollten durchgeführt werden, wenn fehlerhafte Waren zurückgesandt und Geld zurückerstattet werden soll?
Der Preis des Produktes P001 soll erhöht werden. Welche Auswirkungen hat dies auf den berechneten Kontostand für Kunden, die das Produkt kurz zuvor gekauft haben? Wie sollte die Struktur der Datenbank geändert werden, um dieses Problem zu verhindern?
Alle Waren müssen zu einem Listenpreis eingekauft werden. In der Praxis können fallweise Preisnachlässe gegeben werden. Wie könnten solche Preisnachlässe in der Datenbank aufgezeichnet werden?
Mit zunehmendem Datenbestand wäre eine Routine zur Konsolidierung wünschenswert, die alte Einträge entfernt und dafür nur den unbeglichenen Betrag je Kunde hinterläßt (Saldovortrag). Andererseits müßten für eine kleine Firma wohl Jahre/Jahrzehnte an Daten gespeichert werden, bevor es sich negativ in der Bearbeitungszeit oder der Speicherkapazität bemerkbar macht.
Im nächsten Tutorium werden am Beispiel der Buslinien in Edinburgh der Self Join und komplexe SQL-Abfragen geübt.