Angabe zum dritten Beispiel des Laborübungsteils aus Datenmodellierung SS07 Michael Jackl, Markus Pichlmair, Katrin Seyr, Fang Wei [email protected] 4. Mai 2007 1 Allgemeines In diesem Übungsteil sollten Sie das Erstellen von SQL-Anfragen üben. Dazu wird unter http://websql.dbai.tuwien.ac.at (SS07 FIXED) ein Interface zum Zugriff auf eine Postgres Datenbank (v.8.1) zur Verfügung gestellt. Falls Sie lieber auf Ihrer eigenen Datenbank arbeiten, können Sie die Testdaten für dieses Beispiel auf der Webseite als daten.zip herunterladen. Bitte versuchen Sie nach Möglichkeit, die Beispiele eigenständig zu lösen, denn in der Praxis (und bei der Prüfung) sind Sie auch auf sich alleine gestellt. 2 Das Abgabegespräch 1. Sie müssen sich über den LVAManager zu einem Abgabegespräch anmelden. 2. Sie müssen die ersten zwölf der untenstehenden Anfragen lösen. Weiters müssen Sie fünf weitere Anfragen lösen, die Sie frei wählen können. 3. Sie kommen mit Studentenausweis und den Unterlagen auf USB Stick im Informatiklabor zu der von Ihnen reservierten Zeit vorbei, und absolvieren das Abgabegespräch. (Achtung: bitte kein docx, plain text bevorzugt.) 4. Sie haben maximal 20 Minuten für Ihre Abgabe. 5. Sie können maximal 15 Punkte bei der Abgabe erreichen. Sie werden dabei zu drei von Ihren siebzehn Anfragen befragt. Dabei können Sie jeweils maximal fünf Punkte erreichen, wobei nicht nur die Korrektheit der Abfrage überprüft wird, sondern Sie müssen die Abfragen auch erklären und modifizieren können. Weiters wird erwartet, dass Sie wissen, was die von Ihnen 1 in einem SQL Statement verwendeten Ausdrücke bedeuten bzw. was sie bewirken. 6. Die Tutoren tragen ein Protokoll des Abgabegesprächs ein. Die erreichte Gesamtpunktezahl ist im LVAManager für Sie ersichtlich. 3 Sport und Ernährung - Die Datenbank Sport und eine gesunde Ernährung bilden die Basis für sowohl körperliches als auch geistiges Wohlbefinden. Sport und eine gute Ernährung sind auch notwendig, um den täglichen Herausfoderungen gewachsen zu sein und immer wieder Spitzenleistungen zu erbringen. Wir haben eine Datenbank erstellt, um einerseits ein bisschen zum Nachdenken über Bewegung und Ernährung anzuregen, und um andererseits auch SQL zu lernen :-) 3.1 Beschreibung Personen haben eine eindeutige ID, einen Namen, eine Adresse, eine Telefonnummer und ein Geburtsdatum. Betreuer und Sportler sind Personen. Betreuer haben zusätzlich ein Gehalt. Es ist außerdem bekannt, ob sie einen Führerschein besitzen oder nicht. Für Sportler ist das Gewicht und die Nationalität von Bedeutung. Sportler können zu einem Team gehören. Ein Team besteht aus mindestens zwei Sportlern. Eindeutig identifiziert wird das Team durch einen Namen. Jedes Team wird von Betreuern in einer bestimmten Sportart betreut und kann auch mehrere Sportarten betreiben. Eine Sportart wird identifiziert durch eine ID. Außerdem wird ein Name gespeichert und wieviel die Ausrüstung pro Jahr kostet. Zu jeder Sportart ist der Kalorienverbrauch pro halber Stunde bekannt. Er ist abhängig von der Sportart und zusätzlich vom Gewicht des Sportlers. (z.B. beträgt beim Joggen der Verbrauch einer 70kg schweren Person n kcal, einer 90 kg schweren Person m kcal). Es ist bekannt, welcher Sportler welchen Sport betreibt, außerdem ist die Lieblingssportart einiger Sportler bekannt. Speisen werden durch eine eindeutige ID identifiziert. Es werden Name und die Kalorien gespeichert. Eine Mahlzeit ist abhängig vom Sportler, von der Speise und dem Datum. 3.2 Das ER-Diagramm Das entsprechende ER Modell sieht wie folgt aus: 2 [0,*] speiseid [1,1] m_s kcal pid gewicht Speise [1,1] Mahlzeit [0,*] isst name name nationalitaet Person datum adresse [0,*] lieblingssport [0,1] Sportler telefon [0,*] GebDatum teamkomp said name [2,*] Sportart [0,*] [0,*] betreibt name Team kosten [1,*] [1,*] [0,*] betreut [0,*] Betreuer [1,1] gewicht gehalt kcal fuehrerschein Verbrauch 3.3 Das Relationenmodell Person(pid, name, adresse, telefon, gebDatum) Betreuer(Person.pid, fuehrerschein, gehalt) Sportler(Person.pid, gewicht, nationalitaet) Sportart(said, name, kosten) Verbrauch(Sportart.said, gewicht, kcal) Betreibt(Sportler.pid, Sportart.said) Lieblingssport(Sportler.pid, Sportart.said) Team(name) Teamkomp(name, Sportler.pid) Betreut(Team.name, Sportart.said, Betreuer.pid) Speise(speiseid, name, kcal) Mahlzeit(Speise.speise, Sportler.pid, datum) 3 3.4 Die SQL-Anfragen 1. Geben Sie den Namen und die Kalorien aller Speisen aus. 2. Geben Sie den Namen und die Kosten aller Sportarten aus und sortieren Sie die Liste nach den Kosten. 3. Geben Sie den Namen und Kosten jener Sportarten aus, die weniger als 500 Euro im Jahr kosten. Sortieren Sie die Liste nach den Kosten. 4. Geben Sie für jede Sportart (Namen der Sportart) den Verbrauch für eine Person mit 70kg Gewicht aus. Sortieren Sie die Liste absteigend nach dem Verbrauch. 5. Wieviele Betreuer haben einen Führerschein? 6. Erstellen Sie folgende Statistik: Geben Sie eine Liste aller Sportler (es reicht wenn Sie die ID ausgeben) aus, die Anzahl der von ihnen jeweils betriebenen Sportarten und die durchschnittlichen Kosten, die für jeden anfallen. Falls ein Sportler keine Sportart betreibt, dann setzen Sie bitte die Kosten auf “0” (Keyword COALESCE) 7. Geben Sie jene Sportler (ID und Name) mit einem Gewicht unter 80kg aus, die selbst nicht Betreuer sind. 8. Welcher Betreuer (ID und Name), der nach 1989 geboren wurde, verdient das meiste Gehalt? 9. Geben Sie eine Liste aller Sportler (Namen und ID) aus. Wenn sie eine teure Lieblingssportart (= Kosten über 500 Euro) betreiben, sollen auch der Name der Lieblingssportart und die Kosten dazu ausgegeben werden. 10. Um wieviel kg wiegen österreichische Sportler durchschnittlich mehr als deutsche Sportler? 11. Geben Sie den Namen jener Sportler aus, die alle Sportarten ausüben. 12. Geben Sie die beliebtesten (=am meisten gegessenen) Speisen und deren Kalorien aus. 13. Gesucht sind jene Sportarten, die von mehr als der Hälfte der Sportler betrieben werden. 14. Geben Sie eine Liste aller Betreuer aus zusammen mit der Anzahl der Teams, die sie betreuen. 4 15. Geben Sie den Namen jener Sportler aus, die in keinem Team Mitglied sind. 16. Geben Sie den Namen jener österreichischen Sportler aus, für welche keine Lieblingssportart bekannt ist, die aber dennoch eine Sportart betreiben. 17. Geben Sie für jeden Betreuer (Name und ID) die Anzahl der von ihm betreuten Personen aus. 18. Geben Sie eine Liste aller Sportler (Namen) aus und, sofern vorhanden, die Lieblingssportart (Name) und den damit verbundenen Verbrauch aus. (Achtung! Der Verbrauch ist abhängig von dem Körpergewicht des Sportlers.) 19. Geben Sie alle Personen aus, für die folgende Bedingungen erfüllt sind: Sie sind nach 1989 geboren. Sie sind keine Betreuer. Sie sind italienische Sportler. Sie sind nicht Mitglied eines Teams. Sie haben noch nie “Bier” getrunken. 20. Geben Sie eine Liste aller Sportler, bei denen eine Lieblingssportart bekannt ist aus, wieviele Apfelstrudel sie ohne zuzunehmen essen dürfen, wenn sie eine halbe Stunde ihrer Lieblingssportart nachgehen. 21. Geben Sie den Namen jener Personen aus, die ausschließlich ein Team betreuen und auch Mitglied in dem Team sind. Der Name des Teams soll ebenso ausgegeben werden. 22. Geben Sie die Namen jener Speisen aus, die maximal einmal pro Person gegessen wurden, es jedoch mindestens zwei solche Personen gibt. 23. Geben Sie alle Paare (Namen) von Sportlern aus, die Tennis als Sportart betreiben. 24. Geben Sie für jede Speise (Name), die weniger als 100 kcal hat, an, wieviele Speisen es gibt, die mehr Kalorien haben. 5