Formulieren Sie anschließend die folgenden acht Abfragen in SQL und überprüfen Sie sie anhand Ihrer Datenbank:
Musterlösung vom 02.06.2009:
Eine Datenbank lässt sich mit dem Kommandozeilenaufruf mysql -u [loginname] -p user_[loginname]_Uni < uni-db.sql mit den Tabellen aus der Uni-Datenbank füllen, da die Daten in der Datei bereits in SQL-Syntax vorliegen und nur noch mit dem MySQL-Kommandozeilentool ausgeführt zu werden müssen.
Alternativ lässt sich dieser Befehl auch über phpMyAdmin ausführen, indem man die leere Datenbank auswählt und und die SQL-Datei unter 'Importieren' ausführt.
Es ergeben sich folgende Abfragen:
1.
select Name from Assistenten where Year(GebDatum) > 19652.
select Name from Studenten where MatrNr not in (select MatrNr from hoeren)3.
select p.Name, v1.Titel from Professoren p, Vorlesungen v1, Vorlesungen v2, voraussetzen vs where p.PersNr = v1.gelesenVon and vs.Nachfolger = v1.VorlNr and vs.Vorgaenger = v2.VorlNr and v2.Titel = 'Grundzuege'4.
select p.Name, SUM(v.SWS) Stunden
from Professoren p, Vorlesungen v
where p.PersNr = v.gelesenVon
group by p.Name
having Stunden > 5
5.
select floor(raum/100) as Etage, COUNT(*) as Anzahl
from Professoren
group by floor(raum/100)
6.
select p.PersNr, p.Name
from Professoren p
where not exists (select *
from Vorlesungen v1, voraussetzen vor, Vorlesungen v2
where p.PersNr = v1.gelesenVon
and v1.VorlNr = vor.Vorgaenger
and vor.Nachfolger = v2.VorlNr
and v2.gelesenVon != p.PersNr)
7. Bei der Relation 'Voraussetzen' handelt es sich um eine N:M-Beziehung. Daher kann eine Vorlesung mehrere Vorlesungen voraussetzen. Bei der folgenden SQL-Anfrage müsste die Abfrage korrekterweise lauten: Welche Studenten haben Vorlesungen gehört, für die ihnen alle direkten Voraussetzungen fehlen?.
select distinct s.MatrNr, s.Name
from Studenten s, hoeren h, voraussetzen v
where s.MatrNr = h.MatrNr
and h.VorlNr = v.Nachfolger
and not exists (select *
from hoeren h2
where h2.VorlNr = v.Vorgaenger
and h2.MatrNr = s.MatrNr)
8.
select v1.*
from Vorlesungen v1
where not exists (select *
from Vorlesungen v2
where v2.Titel like 'E%'
and not exists (select *
from voraussetzen vor
where v2.VorlNr = vor.Vorgaenger
and vor.Nachfolger = v1.VorlNr))