SQL wird ausführlich behandelt in Kapitel 7. Hier sei nur vorab auf die offensichtliche Verwandtschaft mit der Relationenalgebra und dem Relationenkalkül hingewiesen:
Query: Die Namen der Studenten, die 4-stündige Vorlesungen hören:
select s.name from studenten s, hoeren h, vorlesungen v where s.matrnr = h.matrnr and h.vorlnr = v.vorlnr and v.sws = 4
Query: Die Namen der Studenten, die jeweils alle 4-stündigen Vorlesungen hören:
Wir erinnern uns an die entsprechende Formulierung im relationalen Tupelkalkül:
SQL kennt keinen All-Quantor (wohl aber einen Existenz-Quantor) und auch keinen Implikationsoperator. Wir nutzen daher folgende Äquivalenzen:
ist äquivalent zu | ||
ist äquivalent zu | ||
ist äquivalent zu |
Daher lässt sich der obige Ausdruck umformen in
Daraus entsteht unmittelbar die SQL-Query
select s.name from Studenten s where not exists (select * from vorlesungen v where sws=4 and not exists (select * from hoeren h where h.vorlnr = v.vorlnr and h.matrnr = s.matrnr))