Übung zur Vorlesung ”Einführung in die Informatik für Hörer anderer Fachrichtungen (WZW)” IN8003, SS 2010 Prof. Dr. J. Schlichter Dr. Georg Groh, Dipl.Inform. Dipl.Geogr. Jan Herrmann, Felix Hammerl, BSc http://www11.in.tum.de/Veranstaltungen/EinfuehrungInformatikWzwSS10/uebung Lösung zu Blatt 8+9 • Empfohlender Bearbeitungszeitraum: 07.06 - 11.06 • Die Aufgaben können selbständig aber auch gut in der Gruppe bearbeitet werden. Sie sind nicht abzugeben. Es werden detaillierte Musterlösungen bereit gestellt. Wenn Fragen zu Ihrer Lösung auch nach Vergleich mit der Musterlösung bleiben, können Sie Ihre Fragen im Forum posten. • Zur groben Orientierung ist zu jeder Aufgabe eine Einschätzung des Schwierigkeitsgrades bzw. Aufwandes angegeben: * Eher einfach und straightforward ** Schon schwierig oder zumindest aufwändig *** Ziemlich schwierig oder sehr umfangreich. Wenn man diese Aufgabe halbwegs erfolgreich gemeistert hat, kann man ein wenig stolz auf sich sein. Stoff Es wird empfohlen folgendes Material anzusehen: • Folien zur Zentralübung Sitzung 6+7 • A. Kemper , A. Eickler; Datenbanksysteme - Eine Einführung. Oldenbourg Verlag, 2009. 7. Auflage. Aufgabe 1: SQL ** Formulieren Sie entsprechende SQL-Anfragen auf dem Universitätsschema. 1. Finden Sie alle Studenten, die bei Sokrates eine 1 bekommen haben. select s.Name, s.MatrNr from Studenten s, prüfen p, Professoren prof where prof.Name = ’Sokrates’ and prof.PersNr = p.PersNr and p.Note = 1 and p.MatrNr = s.MatrNr; 2. Finden Sie Studenten, die 4-stündige Vorlesungen hören. select distinct s.MatrNr, s.Name from Studenten s, hören h, Vorlesungen v where s.MatrNr = h.MatrNr and h.VorlNr = v.VorlNr and v.SWS = 4; 3. Finden Sie Vorvorgänger der Vorlesung Bioethik. select v1.Vorgänger as Vorvorgänger from voraussetzen v1, voraussetzen v2,Vorlesungen v where v.VorlNr = v2.Nachfolger and v2.Vorgänger = v1.Nachfolger and v.Titel = ’Bioethik’; 4. Finden Sie die Assistenten von Professoren, die Vorlesungen mit weniger als 3 SWS halten. select distinct a.PersNr, a.Name from Assistenten a, Vorlesungen v where a.Boss = v.gelesenVon and v.SWS < 3; 5. Welche Studenten wurden von dem Professor geprüft, bei dem sie auch die Vorlesung gehört haben? select s.MatrNr, s.Name from Studenten s, Vorlesungen v, hören h, prüfen p where s.MatrNr = h.MatrNr and h.MatrNr = p.MatrNr and v.VorlNr = p.VorlNr and h.VorlNr = p.VorlNr and p.PersNr = v.gelesenVon; Aufgabe 2: Joinoperationen * Überlegen Sie sich einige Anfragen, bei denen die erweiterten Joinoperationen sinnvoll eingesetzt werden können. Linker äußerer Join Die folgende Anfrage bestimmt zu jedem Professor den geleisteten Lehrbeitrag als die Summe der Semesterwochenstunden der von ihm/ihr gehaltenen Vorlesungen. Dabei sollen jedoch auch die Professoren ausgegeben werden, die gar keine Vorlesungen halten. select PersNr, Name, sum(SWS) from Professoren left outer join Vorlesungen on PersNr = gelesenVon group by PersNr, Name; Rechter äußerer Join Mit dieser SQL-Anfrage soll die Prüfungshäufigkeit von Vorlesungen bestimmt werden. Da Vorlesungen hier der zweite Join-Partner ist und auch die Vorlesungen aufgelistet werden sollen, die bisher nicht geprüft wurden, wird dazu ein right outer join verwendet. select count(*) as wieoft, v.VorlNr, v.Titel from prüfen p right outer join Vorlesungen v on p.VorlNr = v.VorlNr group by v.VorlNr, v.Titel; Äußerer Join Folgende Anfrage listet die Kombinationen von Professoren und zugehörigen Assistenten auf. In der Ausgabe sollen auch die Professoren enthalten sein, die keine Assistenten haben, sowie die Assistenten, die gegenwärtig keinem Professor zugeordnet sind. select p.PersNr, p.Name, a.PersNr, a.Name from Professoren p full outer join Assistenten a on a.Boss = p.PersNr;