Allquantor erstellen
Allquantor
"Allquantifizierte Queries"
SQL hat keinen Allquantor, es gibt 4 Workarounds.
Beispiel
Wähle Studenten die alle 4h LVAs gehört haben.
Student ( MatrNr, Name, Semester )
hören ( MatrNr, VorlNr )
Vorlesung ( VorlNr, Titel, SWS, gelesenVon )
1. Logische Äquivalenz (Empfohlen)
durch 2 x
not exists
Logische Umformung: 
Wir suchen Studenten der nicht eine 4h LVA nicht gehört hat.
select s.*
from Student s
where not exists
( select *
from Vorlesung v
where v.SWS = 4 and not exists
( select *
from hören h
where h.VorlNr = v.VorlNr
and s.MatrNr = h.MatrNr ));
2. Teilmengen
durch
exist
und
except
Menge aller 4h LVAs  Menge aller von Student gehörten LVAs (Operator existiert nicht in SQL)
Menge aller 4h LVAs  Menge aller von Student gehörten LVAs = wenn alle gehört
select s.*
from Student s
where not exists
((select VorlNr
from Vorlesung v
where v.SWS = 4)
except
(select VorlNr
from hören h
where h.MatrNr = s.MatrNr))
3. Abzählen (Nicht empfohlen)
durch
count
# 4h LVAs jeder Student besucht hat = # 4h LVAs die es gibt
select s.MatrNr, s.Name
from Student s, hören h, Vorlesung v
where s.MatrNr = h.Matrnr and
h.VorlNr = v.VorlNr and
vSWS = 4
group by s.MatrNr, s.Name
having count (*) =
(select count (*) from Vorlesung where SWS = 4);
4. Division aus Relationaler Algebra
durch 2x
except
-
Finde Kreuzprodukt von Student und Vorlesung mit 4h
= Tupel die alles was ein Student hören kann beschreiben
-
Ziehe von Kreuzprodukt alles was studenten bisher gehört haben ab
= Alle Studenten die bisher nicht alles gehört haben
-
Ziehe von allen Studenten, die die nicht alles gehört haben ab
= alle Studenten die alles gehört haben
(select sja.MatrNr from Student sja) -- Alle studenten die es gibt
except
(select snein.MatrNr -- Alle Studenten die nicht alles gehört haben
from (
(select s.MatrNr, v.VorlNr
from Student s, Vorlesung v
where v.SWS = 4)
except
(select *
from hören)
)
snein);