SQL ALL-Operator?
Hallo,
ich würde gerne wissen wie der ALL Operator genau auswertet. Sagen wir ich suche etwas das a>= ALL(Some values) und sagen wir a=3. Wenn jetzt 2 Values in dem set vorkommen auf die das zutrifft(sagen wir v1=3,v2=3) werden mir beide ausgegeben oder stoppt er bei dem ersten den er findet ohne zu schauen ob es noch einen gibt?
1 Antwort
![](https://images.gutefrage.net/media/user/davegarten/1635518465011_nmmslarge__0_0_160_160_7f828fad18ee7edb96b8daceedaeeadb.png?v=1635518465000)
Der ALL Operator muss für die gewählte Subquery-Vergleichscolumn sämtliche Rows des Subqueries auf die Bedingung prüfen, die im Zusammenhang mit ALL angegeben wurde. Es ist anders nicht möglich (mit irgend einer technischen Abkürzung).
Beim ANY-Operator (äquivalent zu SOME) hingegen genügt es, wenn das DBMS genau eine Row im Subquery findet, die Bedingung im Zusammenhang mit ANY erfüllt. Es ist dann nicht mehr nötig, noch alle verbleibenden Rows des Subqueries zu prüfen, falls es noch weitere Rows in dessen Resultset gibt.
Weiter gilt noch: "IN" ist äquivalent zu "= ANY", "NOT IN" ist äquivalent zu "<> ALL".
Was deine Abfrage letztlich ausgibt, bestimmst Du aber in der Hauptabfrage und nicht im Subquery. D.h. auch wenn die ALL/ANY -Bedingung erfüllt ist, kann es sein, dass Dein Hauptquery gar nichts zurückgibt. Typischerweise hast Du ein Hauptquery, welches irgendwo eine WHERE-Clause hat, in welcher dann das ALL/ ANY Statement mit einem Boolesch'en Operator steht, und rechts des ALL/ ANY folgt dann das Subquery in Klammern.