Ergänzende Informationen Punkt 1: Lösungsvorschlag zu den BSPs

Werbung
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.
Herunterladen