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 > 55.
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))