Divisionsbeispiel - in depth
Wiki Beispiel: https://de.wikibooks.org/wiki/Relationenalgebra_und_SQL:_Division
Definition
Division
und sind Relationen wobei .
Division lässt sich mit Basisoperationen ausdrücken:
Keine Attribute vonin
Beispiel
Relationale Algebra
MatrNr VorlNr
---------------
26120 5001
27550 5001
27550 4052
28106 5041
28106 5001
28106 4052
28106 4630
29120 5001
29120 5041
29120 5049
VorlNr
-------
5001
5041
4052
4630
Wir drücken Division mit primitiven Operatoren aus:
Duplikate entfernt
MatrNr
-------
26120
27550
28106
29120
VorlNr
-------
5001
5041
4052
4630
Alle möglichen Kombinationen von Tupeln.
Alles was ein Student hören kann.
MatrNr VorlNr
---------------
26120 5001
26120 5041
26120 4052
26120 463027550 5001
27550 5041
27550 4052
27550 463028106 5001
28106 5041
28106 4052
28106 463029120 5001
29120 5041
29120 5049
29120 4630
Alle möglichen Kombinationen von Tupeln die nicht in ursprünglich vorhanden waren.
MatrNr VorlNr
---------------
26120 5001
26120 5041
26120 4052
26120 463027550 5001
27550 5041
27550 4052
27550 463028106 5001
28106 5041
28106 4052
28106 463029120 5001
29120 5041
29120 5049
29120 4630
MatrNr VorlNr
---------------
26120 500127550 5001
27550 405228106 5041
28106 5001
28106 4052
28106 463029120 5001
29120 5041
29120 5049
Daraus folgt (wobei
28106
nicht mehr steht weil er alles gehört hat)
MatrNr VorlNr
---------------
26120 5041
26120 4052
26120 4630
27550 5041
27550 4630
29120 4630
Duplikate eliminiert
Das sind alle Studenten die nicht alles gehört haben
MatrNr
-------
26120
27550
29120
Erinnerung:
MatrNr
-------
26120
27550
28106
29120
Erinnerung:
MatrNr
-------
26120
27550
29120
Daraus folgen alle Studenten die alles gehört haben:
MatrNr
-------
28106
SQL
Wir wollen dass das Modulo (Alle vom Studenten noch nicht angehörten Vorlesungen) leer ist.
(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);