/media/sda-magnetic/david/Dok-15-2023-11-27/fernuni-hagen/cs-i-ii/old-cs-2-02/boolequantity.txt


Meine Damen und Herren
https://de.wikibooks.org/wiki/Relationenalgebra_und_SQL:_Differenz
Ich habe schon eine Lösung für das Problem gefunden. Die Differenzmenge - in MySQL:
SELECT * FROM r
EXCEPT
SELECT * FROM s
Ich habe doch neulich gesagt, eigentlich müsste man Mengen verknüpfen können, wie in der Booleschen Algebra. Also, Wahrheitstablle

c b a y
0 0 0 
0 0 1
0 1 0
0 1 1
1 0 0 
1 0 1
1 1 0
1 1 1

Das ist mit AND und ODER ja schon gelungen - INTERSECT und UNION. Jetzt war die Frage, nach dem NICHT

NICHT a müsste jedes Element sein - außer, die Elemente, die in a sind - aber, was ist jedes Element. Na ja, die Frage, stellt sich nach unserer Menge.

Und die Antwort lautet: Die Menge ist unendlich groß. Bei Zahlen 32 Bit 4.000.000.000+ Oder: Bei VARCHAR (256) und das ist ein kleiner Text, undenkbar.

Ist es die leere Menge? Kann auch nicht sein.

Dann bin ich auf die Lösung gekommen - was unsere Menge ist. Mathematisch ist das

a x b x c

A x B x C

Das ist das Kreuzprodukt. Die Menge ist nicht etwa, die Menge, der möglichen Elemente - sondern, die vorhandene Menge A x B x C sind ja gefüllt, also das Kreuzprodukt.

Jetzt das nicht, das sind alle 

A x B x C

ohne A. Da ohne A, könnte man auch schreiben 

B x C

Jetzt gibt es ein Problem. In B x C können Elemente auch in A sein. Also, brauchen wir eine Differenzmenge

B x C schreibt man in MySQL mit

SELECT x FROM (SELECT x FROM b UNION SELECT x FROM c)x ORDER BY x

Jetzt die Differenzmenge ist EXCEPT. Also müssen wir schreiben 

(B x C)\A

SELECT x FROM(
    SELECT x FROM (
        SELECT x FROM b 
        UNION 
        SELECT x FROM c
   )x
   EXCEPT 
   SELECT x FROM a
)x ORDER BY x