Ergänzende Informationen Punkt 1: Lösungsvorschlag zu den BSPs auf Folie 2 der Sitzung 10 Die Lösungen sind in SQL angegeben. Aus dieser Form sollte sich der relationale Algebraausdruck einfach herleiten lassen. Einrückungen dienen ausschließlich der Übersichtlichkeit bzw. Verständlichkeit. 1. Welche Professoren kennt Carnap? select distinct(p.Name) from professoren p, studenten s, hoeren h, vorlesungen v where p.PersNr = v.gelesenVon and s.MatrNr = h.MatrNr and h.VorlNr = v.VorlNr and s.Name = 'Carnap' 2. Wer ließt mindestens 2 Vorlesungen? select distinct p.Name from vorlesungen v1, vorlesungen v2, professoren p where v1.gelesenVon = v2.gelesenVon and v1.gelesenVon = p.PersNr and v1.VorlNr != v2.VorlNr; 3. Wer hört mindestens eine Vorlesung? (select s2.MatrNr from studenten s2) minus ( (select s1.MatrNR from studenten s1) minus (select h.MatrNr from hoeren h) ) Beachten sie dass MySQL keinen Mengendifferenz Operator unterstützt. Dieser kann allerdings z.B. durch NOT EXISTS oder über einen left join „simuliert“ werden. In der Klausur dürfen sie selbstverständlich mit dem Mengendifferenz Operator ‚minus’ wie er in Oracle oder DB2 Datenbanken zur Verfügung steht arbeiten. Möchten sie den minus Operator explizit an der unidb testen dann geben sie ihre Anfrage unter… ein. Dort steht ein Frontend zu einem DB2 DBMS zur Verfügung. 4. Wer hat alle geprüften Vorlesungen auch gehört? (select s.MatrNr from studenten s) minus (select tmp.MatrNr from ((select pr.MatrNR, pr.VorlNr from prüfen pr) minus (select h.MatrNr, h.VorlNr from hoeren h)) as tmp ) Diese Anfrage gibt auch Studenten zurück die keine Prüfung abgelegt haben. Um diese zu eliminieren müssen die Sudenten abgezogen werden die keine Prüfung absolviert haben. d,h. die Antwort hierzu lautet: ( (select s1.MatrNr from studenten s1) minus (select pr1.MatrNr from prüfen pr1) ) minus (select tmp.MatrNr from ( (select pr.MatrNR, pr.VorlNr from prüfen pr) minus (select h.MatrNr, h.VorlNr from hoeren h) ) as tmp ) 5. Welche Studenten hören Mäeutik oder Ethik select s.Name from Vorlesungen v, hoeren h, Studenten s where (v.Titel = 'Maeeutik' or v.Titel = 'Ethik') and h.VorlNR = v.VorlNr and s.MatrNr = h.MatrNr; 6. Welche Studenten hören Mäeutik und Ethik select s.Name from Vorlesungen v, hoeren h, Studenten s, Vorlesungen vv, hoeren hh where v.Titel = 'Maeeutik' and vv.Titel = 'Ethik' and h.VorlNR = v.VorlNr and hh.VorlNr = vv.VorlNr and s.MatrNr = h.MatrNr and h.MatrNr = hh.MatrNr Punkt 2: Zu den Problemen die bei copy paste von sql code der Übungsblätter in das SQL Fenster von myphpadmin entstehen. Das Problem liegt daran, dass bei der PDF Erstellung eine andere Zeichenkodierung verwendet wurde als die des SQL Eingabefeldes. Zur Behebung der Probleme gibt es drei Verfahrensweisen: 1: Statement selber eintippen bzw. abtippen 2: Händisches Eliminieren der Kodierungsfehler Achten sie darauf, dass… • keine Leerzeichen zwischen dem Namen der Aggregat-Funktionen und dem Argument auftauchen • ob die Tabellen und Attributnamen mit Umlautzeichen (z.B. ö) oder ob diese in „ausgeschrieben“ (z.B. oe) verwendet wurden. Die verwendeten Bezeichner in Ihrer SQL Anfrage müssen mit dem Schema der DB übereinstimmen. • String Literale per einfachen Hochkomme eingeschlossen sind (zB. p.Name = ’Sokrates’)‚ • an der Stelle wo das DB einen Fehler anprangert kann ein unsichtbares zeichen sein. Dies erkennen sie indem sie mit dem Cursor zeichen um zeichen durch ihre anfrage gehen. bleibt ihr cursor an einer Position stehen obwohl sie die pfeiltaste nach rechts gedrückt haben, dann ist dort ein verwstecktes zeichen. Dieses löschen und dann sollts gehen 3. Im Browser Zeichenkodierung Umstellen Gehen sie nach dem Einfügen auf Ansicht->Zeichenkodierung und stellen sie unter weitere auf die Kodierung UTF-16 um. Stellen sie anschließend wieder zurück auf UTF-8.