Datenbanken 12. Aufgabenblatt Gegeben ist die Access-Datenbank Nordwind.mdb. Es handelt sich um eine Microsoft-Access Datenbank, die häufig unter dem Office-Paket installiert ist. Sie befindet sich häufig unter dem Verzeichnis C:\Programme\Microsoft Office\Office10\Samples\Nordwind.mdb. Daten bzw. SQL-Anweisungen dazu befinden sich unter Samples im Skript NordwindCS.sql. Aus diesem Skript wurden Daten und SQL-Anweisungen in Oracle überführt (vgl. aufg12.sql). Den Zusammenhang zwischen den Tabellen beschreibt das folgende ERM-Diagramm1: Personal_Nr Firmen_Nr Personal Versdandfirmen 1 P_B Kunden_Code Kunden 1 V_B n 1 K_B n n Bestellungen 1 Lieferanten_Nr Lieferanten Kategorie_Nr Kategorien B_D L_A K_A n n Artikel 1 A_B Artikel_Nr n n Bestelldetails An Nordwind wurde Kritik geübt. 1 2 Es fehlen die Beziehungstypen 1:1 (oder präziser c:c2) und mc:mc. In der Tabelle Bestellung treten beliebig viele redundante, ggf. widersprüchliche Daten im Empfänger und dessen Adressen auf Eine vollständig erfasste Adresse findet man in nicht weniger als vier Tabellen Muss überhaupt zwischen Lieferant und Kunden unterschieden werden? Üblicherweise legt man den Rabatt beim Kunden an Im Feld Vorgesetzter haben nur drei Angestellte einen Vorgesetzten. Der Inhalt der Tabellen verstößt gegen die 1. Normalform. Vgl. auch: http://www.schulserver.hessen.de/darmstadt/lichtenberg/SQLTutorial/db_nordwind.html c: conditional, also möglicherweise. 1 Datenbanken - usw. Es handelt sich um eine Beispielbank zum Üben. Deshalb sollte man nicht so kritisch sein und lieber zur Praxis schreiten 1. Aufgabe: Implementierung der Nordwind-DB in Oracle Erzeuge die Tabellen zu der Nordwind-Datenbank und fülle die Tabellen mit Daten. Vorlage: ERM-Diagramm, NordwindCS.sql Lösung: http://fbim.fh-regensburg.de/~saj39122/dbnew/aufgaben/aufg12/aufg12.sql 2. Aufgabe Einfache Abfragen 1) Schreibe eine Abfrage, die alle Datensaetze der Nordwind-DB mit der Lieferanten_Nr = 2 und der Kategorie_Nr = 1 liefert. Lösung: Es wurden keine Datensätze gefunden. 2) Schreibe eine Abfrage, die alle Artikelnamen mit deren Kategorie_Nr auflistet. Dabei soll folgender Satz ausgegeben werden: Der Artikel X gehört zur Kategorie Y. 3) Erstelle eine Abrage, die alle Artikel ausgibt, die mit 'C', 'D' oder 'E' anfangen. 4) Erstelle eine Abfrage, die alle Artikel ausgibt, bei denen der 5. Buchstabe kein 'c' ist. 5) Erstelle eine Abfrage, die alle Artikel ausgibt, bei denen der 5.Buchstabe ein 'c' oder 'd' ist. Diese sollen aufsteigend nach dem Artikelnamen sortiert sein. 6) Schreibe eine Abfrage, die die Spalte Ort der Kundentabelle ausgibt. Es soll keine Stadt mehrfach auftauchen. 3. Aufgabe: Abfrage von Funktionen 1) Liste alle Lieferanten auf, die mehr als 5 Produkte liefern. 2) Liste die Lieferanten mit ihrem jeweils teuersten Artikel auf. Es sollen nur die Lieferanten angezeigt werden, bei denen der teuerste Artikel billiger als 10.- Euro ist. 3) Liste den Nachnamen des Mitarbeiters auf, der am längsten eingestellt war. 4. Aufgabe: Datenabfragen über mehrere Tabelle 1) Welche Kunde "Kontaktperson" haben Artikel der Kategorie 'beverages' bestellt? Benutze, soweit es moeglich ist, NATURAL JOINs. 2) Welcher Kunde hat noch nie bestellt? Benutze einen OUTER JOIN. 3) Welche Kunden wurden bisher von Speedy Express beliefert? Benutze INNER_JOIN und NATURAL JOIN, soweit es möglich ist. Arbeite mit einer Hilfs-View a) Erstellen einer Sicht b) Abfrage über die erstellte Sicht 2 Datenbanken 4) Erstelle eine Abfrage, die rechts den Mitarbeiter und links den Vorgesetzten ausgibt. Der Chef sollte in der Spalte Vorgesetzter BOSS zu stehen haben. 5) Schreibe eine Abfrage, die die Kontaktperson der Lieferanten ausgibt, die die Produkte 1 oder 2 oder 3 liefern. 6) Schreibe eine Abfrage, die Kundennamen, die entsprechenden Bestellungnummern und die Namen des Angestellten, der die Bestellung bearbeitet hat, ausgibt. 3