Uni Duisburg Fachgebiet Informationssysteme Prof. Dr. N. Fuhr Übungsblatt 4 Kai Großjohann Aufgabe 1: Abgabe bis 13. November 2002 Lieferanten-Beispiel Zur Erinnerung: In unserer Miniwelt sollen Lieferanten Produkte zu bestimmten Preisen liefern. Daraus ergibt sich eine Relation mit folgendem Schema: Lief : {[ LName : string, PName : string, Preis : integer ]} Die natürlichsprachige Formulierung der Anfragen ist: 1. Welche Lieferanten liefern Milch? 2. Welche Lieferanten liefern Eier? 3. Welche Lieferanten liefern Milch oder Eier? 4. Welche Lieferanten liefern sowohl Milch als auch Eier? 5. Wer liefert Milch am billigsten? 6. Wer ist der zweitbilligste Milchlieferant? 7. Wie teuer sind Eier beim billigsten Milchlieferanten? 8. Welche Lieferanten liefern Eier billiger als der billigste Milchlieferant? Formuliere diese Anfragen in SQL. Verwende dazu die freie SQL-Schnittstelle in Passau, deren URL laut Vorlesung wie folgt lautet: http://www.db.fmi.uni-passau.de/local/db2sql/ Auf der Webseite der Vorlesung gibt es einen Link auf ein SQL-Skript, mit dem man die Tabelle lief löschen und dann neu erzeugen kann. Da die Daten in der dortigen Datenbank regelmäßig gelöscht werden, könnte dieses Skript von Nöten sein. Das Skript ist auch hier in Tabelle 1 abgedruckt. Falls du denkst, es wäre besser, noch weitere Beispiel-Tupel hinzuzfügen, so schicke mir eine Mail. Die Verwendung von min, max, avg, count (und den anderen Aggregationsfunktionen) sowie von geschachtelten SELECTs ist verboten. 3 Punkte Aufgabe 2: Zusammenhang mit Algebra und Kalkül Schreibe die Relationenalgebra-Ausdrücke zu „Welche Lieferanten liefern Milch oder Eier“ und zu „Welche Lieferanten liefern sowohl Milch als auch Eier“ hin. Dokumentiere an diesen beiden Beispielen, wie man Relationenalgebraausdrücke in SQL-Anfragen umwandelt. Schreibe die gleichen zwei Anfragen in Tupelkalkül oder Bereichskalkül hin. Dokumentiere an diesen Beispielen, wie man Kalkülausdrücke in SQL-Anfragen umwandelt. Übungsblatt 4 Seite 1 von 3 Uni Duisburg Fachgebiet Informationssysteme Prof. Dr. N. Fuhr DROP TABLE lief; CREATE TABLE lief( lname varchar(30) not null, pname varchar(30) not null, preis integer not null); INSERT INSERT INSERT INSERT INSERT INSERT INSERT INTO INTO INTO INTO INTO INTO INTO lief lief lief lief lief lief lief VALUES VALUES VALUES VALUES VALUES VALUES VALUES (’schmidt’, ’milch’, 10); (’schmidt’, ’eier’, 10); (’mueller’, ’milch’, 20); (’huber’, ’milch’, 10); (’hahn’, ’eier’, 5); (’metzger’, ’schnitzel’, 25); (’gruen’, ’schnittlauch’, 1); Tabelle 1: SQL-Skript zum Erzeugen der Tabelle lief. Unter „dokumentieren“ verstehe ich eine Erklärung, aus der die einzelnen Schritte ersichtlich sind. Es reicht nicht, die SQL-Anfragen hinzuschreiben! Zum besseren Verständnis ist es vermutlich günstig, in mehreren Schritten vorzugehen und jeden Schritt zu erläutern. Vergleiche die entstandenen SQL-Anfragen. Welche Anfragen sind besser? Welche sind schöner? Warum? Wie gut ist der Zusammenhang zwischen der Algebra und SQL bzw. der Zusammenhang zwischen dem Kalkül und SQL zu erkennen? Warum kommt in den SQL-Anfragen keine Aggregationsfunktion vor? 3 Punkte Aufgabe 3: SQL Hier sind Aggregationsfunktionen erlaubt. Formuliere folgende Anfragen in SQL. Verwende Zwischenschritte und erläutere dein Vorgehen. • Wer liefert Milch am billigsten? • Wieviele Lieferanten liefern Eier billiger als der billigste Milchlieferant? • Welches Produkt hat den niedrigsten Durchschnittspreis? • Welches Produkt hat den niedrigsten minimalen Preis? 2 Punkte Aufgabe 4: Krankenhausbeispiel Formuliere in SQL die beiden Anfragen aus Blatt 2, Aufgabe 3: • Welche Gerichte darf Herr Schmidt nicht essen? • Wieviel Salz ist höchstens in den Gerichten, die Herr Schmidt essen darf? Erläutere dein Vorgehen. 1 Punkt Übungsblatt 4 Seite 2 von 3 Uni Duisburg Aufgabe 5: Fachgebiet Informationssysteme Prof. Dr. N. Fuhr SQL Seien P und Q zwei Select-Statements auf der gleichen Relation,1 deren Ergebnisse das gleiche Schema haben. Gib einen Algorithmus an, wie man P union Q in einem Select-Statement ohne union ausdrücken kann. Gib einen Algorithmus an, wie man P intersect Q in einem Select-Statement ohne intersect ausdrücken kann. 1 Punkt Aufgabe 6: Obfuscated SQL Contest You know the drill. . . Schreibe eine schön scheußliche SQL-Anfrage für das Lieferanten-Beispiel hin und erkläre sie.2 1 Gemeint 2 Ich ist die in der From-Klausel angegebene Relation. nehme nicht teil. Übungsblatt 4 Seite 3 von 3