Frage zu SQL Mengenoperatoren Exists und Any

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Frage zu SQL Mengenoperatoren Exists und Any
Hallo zusammen,

bei ÜB07/08 1.4.2 lautet die Aufgabe: ,Erstellen Sie mit Hilfe eines Mengenquantors eine Liste aller Mitarbeiter, die denselben Vornamen wie mindestens ein Versicherungsnehmer haben."

Was ist hier der unterschied zwischen Exists und Any?

SELECT id
FROM mitarbeiter
WHERE vorname = ANY (Select vorname from versicherungsnehmer);

SELECT id
FROM mitarbeiter
WHERE vorname = EXISTS (Select vorname from versicherungsnehmer);

Viele Grüße,
Speedy


Bin kein Experte, ich denke aber EXISTS ist hier falsch, weil EXISTS einen boolschen Wert annimmt. Dein zweites Beispiel würde also gar nicht funktionieren, weil du vorname mit einem true/false vergleichst. Hier nochmal ausführlicher mit Beispiel: https://www.w3schools.com/sql/sql_exists.asp.


Zunächst mal: Mengenquantor (ANY, ALL, SOME) != Existenzquantor (EXISTS)

Wie auch schon erwähnt: EXISTS liefert einen boolschen Wert (true oder false) zurück.

Die Anfrage mit EXISTS sollte also so ausschauen:

SELECT m.id
FROM mitarbeiter m
WHERE EXISTS (SELECT v.id FROM versicherungsnehmer v WHERE v.vorname = m.vorname);
(korrelierte Unteranfrage)


ANY (und Synonym SOME) ist eine Abkürzung für genau diese korrelierte Unterabfrage. Beide sind ungefähr dasselbe wie IN, sie unterscheiden sich anscheinend nur beim Vergleich mit NULL-Werten: https://stackoverflow.com/questions/2298550/oracle-any-vs-in