prev up next


Aufgabe 6.2 (10 Punkte)

Alle Studenten sollen ab sofort alle 4-stündigen Vorlesungen von Dozent 'Sokrates' hören. Formulieren Sie eine SQL-Anfrage, die diese Operation durchführt.

Musterlösung vom 08.06.2008:

-- Das aeussere select holt alle Studenten und bildet das Kreuzprodukt
-- mit allen relevanten Vorlesungsnummern. Das not exists schliesst dabei die
-- Tupel aus der Menge aus, die schon in hoeren enthalten sind, da das insert
-- sonst eine Fehlermeldung werfen wuerde.

insert into hoeren
select s.MatrNr, v.VorlNr
  from Vorlesungen v, Professoren p, Studenten s
 where v.gelesenVon = p.PersNr
   and SWS = 4
   and p.Name = 'Sokrates'
   and not exists (select *
                     from hoeren h 
                    where h.MatrNr = s.MatrNr
                      and v.VorlNr = h.VorlNr)

-- einfacher geht's mit 'ignore':

insert ignore into hoeren
select s.MatrNr, v.VorlNr
  from Vorlesungen v, Professoren p, Studenten s
 where v.gelesenVon = p.PersNr
   and SWS = 4
   and p.Name = 'Sokrates'


prev up next