Datenbanksysteme 1 Tupelkalkül und SQL Marius Eich 12. Oktober 2016 1 / 15 Aufgabe 1a) Angestellte(PersonalNr, Name, Gehalt, Beruf, AbteilNr, ChefNr, Wohnort) Abteilung(AbteilNr, AbteilName, Ort) Geben Sie die Nummern und Namen aller Abteilungen aus. πAbteilNr, AbteilName (Abteilung) {[a.AbteilNr , a.AbteilName]|a ∈ Abteilung } 2 / 15 Aufgabe 1b) Angestellte(PersonalNr, Name, Gehalt, Beruf, AbteilNr, ChefNr, Wohnort) Abteilung(AbteilNr, AbteilName, Ort) Geben Sie die Namen und Berufe aller Angestellten aus, die in Mannheim wohnen. πName, Beruf (σWohnort=’Mannheim’ (Angestellte)) {[a.Name, a.Beruf ]|a ∈ Angestellte ∧ a.Wohnort =0 Mannheim0 } 3 / 15 Aufgabe 1c) Angestellte(PersonalNr, Name, Gehalt, Beruf, AbteilNr, ChefNr, Wohnort) Abteilung(AbteilNr, AbteilName, Ort) Listen Sie Name, Gehalt und Abteilungsname aller Programmierer auf, die in Darmstadt beschäftigt sind. πName, Gehalt, AbteilName (σOrt=’Darmstadt ∧ Beruf=’Programmierer’ ( Angestellte Abteilung)) {[a.Name, a.Gehalt, d.AbteilName]|a ∈ Angestellte ∧ d ∈ Abteilung ∧ a.AbteilNr = d.AbteilNr ∧ d.Ort =0 Darmstadt 0 ∧ a.beruf = ‘Programmierer 0 } 4 / 15 Aufgabe 1d) Angestellte(PersonalNr, Name, Gehalt, Beruf, AbteilNr, ChefNr, Wohnort) Abteilung(AbteilNr, AbteilName, Ort) Welche Angestellten verdienen mehr als ihre direkten Chefs? πA.PersonalNr, A.Name (σA.Gehalt > B.Gehalt ( ρA (Angestellte) A.ChefNr = B.PersonalNr ρB (Angestellte))) {a|a ∈ Angestellte ∧ ∃b ∈ Angestellte(a.ChefNr = b.PersonalNr ∧ a.Gehalt > b.Gehalt)} 5 / 15 Aufgabe 1e) Angestellte(PersonalNr, Name, Gehalt, Beruf, AbteilNr, ChefNr, Wohnort) Abteilung(AbteilNr, AbteilName, Ort) Welche Abteilungen haben keine Angestellten? πAbteilNr (Abteilung) \ πAbteilNr (Angestellte) {d|d ∈ Abteilung ∧ ¬∃a ∈ Angestellte(d.AbteilNr = a.AbteilNr )} 6 / 15 Aufgabe 1f) Angestellte(PersonalNr, Name, Gehalt, Beruf, AbteilNr, ChefNr, Wohnort) Abteilung(AbteilNr, AbteilName, Ort) In welchen Abteilungen sind alle Berufe des Unternehmens vertreten? (πAbteilNr, AbteilName, Beruf (Angestellte πBeruf (Angestellte) Abteilung))÷ {d|d ∈ Abteilung ∧ ∀x ∈ Angestellte (∃a ∈ Angestellte(x.Beruf = a.Beruf ∧ a.AbteilNr = d.AbteilNr ))} 7 / 15 Aufgabe 2a) Rebsorte Wein Jahrgang {[Sorte, Name, Farbe]} {[ID, Name, RSorte]} {[WeinID, Jahr, Preis, Qualität]} Geben die Farbe der Rebsorte Merlot an. {[r .Farbe]|r ∈ Rebsorte ∧ r .Name = “Merlot00 } 8 / 15 Aufgabe 2b) Rebsorte Wein Jahrgang {[Sorte, Name, Farbe]} {[ID, Name, RSorte]} {[WeinID, Jahr, Preis, Qualität]} Aus welcher Rebsorte ist der Wein mit dem Namen ”Bassermann-Jordan” gemacht. {[r .Name]|r ∈ Rebsorte ∧ ∃w ∈ Wein( r .Sorte = w .RSorte ∧ w .Name = ”BJ 00 )} 9 / 15 Aufgabe 2c) Rebsorte Wein Jahrgang {[Sorte, Name, Farbe]} {[ID, Name, RSorte]} {[WeinID, Jahr, Preis, Qualität]} Listen Sie den Namen und die Preise aller Riesling-Weine auf. {[w .Name, j.Preis]|w ∈ Wein ∧j ∈ Jahrgang ∧ w .ID = j.WeinID ∧ ∃r ∈ Rebsorte( r .Sorte = w .RSorte ∧ r .Name = ”Riesling00 )} 10 / 15 Aufgabe 2d) Rebsorte Wein Jahrgang {[Sorte, Name, Farbe]} {[ID, Name, RSorte]} {[WeinID, Jahr, Preis, Qualität]} Für welche Rebsorten sind keine Weine in der Datenbank? Geben Sie deren Namen an. {[r .Name]|r ∈ Rebsorte ∧ ¬∃w ∈ Wein(r .Sorte = w .RSorte)} 11 / 15 Aufgabe 2e) Rebsorte Wein Jahrgang {[Sorte, Name, Farbe]} {[ID, Name, RSorte]} {[WeinID, Jahr, Preis, Qualität]} Welche Weine haben ausschliesslich exzellente Qualität (Qualität = 1)? Listen Sie deren IDs auf. {[w .id]|w ∈ Wein∧∀j ∈ Jahrgang(w .ID = j.WeinID =⇒ j.Qualitaet = 1)} 12 / 15 Aufgabe 3 Geben Sie die Namen der Studenten an, die die Vorlesung ’Bioethik’ besuchen und alle Vorlesungen besucht haben, die direkt von dieser Vorlesung vorausgesetzt werden. Mit Allquantor: {[s.Name] | s ∈ Studenten ∧ ∃h ∈ hören(s.MatrNr = h.MatrNr ∧ ∃v ∈ Vorlesungen(h.VorlNr = v .VorlNr ∧ v .Titel =0 Bioethik 0 ∧ ∀vs ∈ voraussetzen (vs.Nachfolger = v .VorlNr =⇒ ∃h2 ∈ hören( h2.MatrNr = s.MatrNr ∧h2.VorlNr = vs.Vorg änger ))))} 13 / 15 Aufgabe 3 Verwende: ∀t ∈ R(P(t)) = ¬(∃t ∈ R(¬P(t))) L =⇒ R = ¬L ∨ R {[s.Name] | s ∈ Studenten ∧ ∃h ∈ hören(s.MatrNr = h.MatrNr ∧ ∃v ∈ Vorlesungen(h.VorlNr = v .VorlNr ∧ v .Titel =0 Bioethik 0 ∧ ¬(∃vs ∈ voraussetzen(¬(¬(vs.Nachfolger = v .VorlNr ) ∨∃h2 ∈ hören( h2.MatrNr = s.MatrNr ∧ h2.VorlNr = vs.Vorg änger ))))))} 14 / 15 Aufgabe 3 Mit de Morgans Regel ¬(L ∨ R) = ¬L ∧ ¬R: {[s.Name] | s ∈ Studenten ∧ ∃h ∈ hören(s.MatrNr = h.MatrNr ∧ ∃v ∈ Vorlesungen(h.VorlNr = v .VorlNr ∧ v .Titel =0 Bioethik 0 ∧¬∃vs ∈ voraussetzen(vs.Nachfolger = v .VorlNr ∧¬(∃h2 ∈ hören( h2.MatrNr = s.MatrNr ∧ h2.VorlNr = vs.Vorg änger )))))} 15 / 15