Durch die Angabe eines Mengenvergleichsprädikats (quantified_predicate) wird ein Vergleich eines Wertes bzw. einer Werteliste mit einer Menge von Werten bzw. Wertelisten durchgeführt.
<quantified_predicate> ::=
<expression> <comp_op> <quantifier>
<expression_list>
| <expression> <comp_op> <quantifier>
<subquery>
| <expression_list> <equal_or_not> <quantifier>
(<expression_list>,...)
| <expression_list> <equal_or_not> <quantifier>
<subquery>
Für den Vergleich von Werten stehen
folgende Vergleichsoperatoren zur Verfügung:
<, >, <>, !=, =, <=, >= (comp_op)
Für den Vergleich von Wertelisten stehen nur die Vergleichsoperatoren = und <> zur Verfügung (equal_or_not).
Zur Qualifizierung des Mengenvergleichs stehen ALL bzw. SOME oder ANY zur Verfügung (quantifier).
Die Subquery (subquery) muß eine Ergebnistabelle (siehe Ergebnistabellenname) liefern, die so viele Spalten enthält wie Werte durch den Ausdruck (expression bzw. expression_list) auf der linken Seite des Operators erzeugt sind.
Jede auf der rechten Seite des Vergleichsoperators equal_or_not angegebene Werteliste (expression_list) muß so viele Werte enthalten, wie in der Werteliste vor dem Vergleichsoperator equal_or_not angegeben sind.
· Sei x das Ergebnis des ersten Wertes (expression) und S das Ergebnis der Subquery oder der Folge von Werten. S ist eine Menge von Werten s. Der Wert x und die Werte in S müssen miteinander vergleichbar sein.
·
Wenn auf der linken Seite der Vergleichsopertors
equal_or_not eine Werteliste (expression_list) angegeben ist, dann sei x die Werteliste, die sich aus den
Ergebnissen der Werte x1, x2, ..., xn dieser Werteliste zusammensetzt. S sei
das Ergebnis der Subquery, die sich aus einer Menge von Wertelisten s
zusammensetzt. oder eine Folge von Wertelisten s. Eine Werteliste s setzt sich
aus den Ergebnissen der Werte s1, s2, ..., sn zusammen. Ein Wert xm muss mit
allen Werten sm vergleichbar sein.
x=s ist wahr, wenn xm=sm, m=1,...,n
x<>s ist wahr, wenn es mindestens ein m gibt, für das gilt
xm<>sm.
x <equal_or_not> s ist undefiniert, wenn es kein m gibt, für das xm <equal_or_not> sm falsch ist und es mindestens ein m gibt, für das xm
<equal_or_not> sm undefiniert ist.
Wenn ein xm oder ein ym NULL-Werte sind, oder wenn das Ergebnis der Subquery
leer ist, dann ist x <equal_or_not> y undefiniert.
In der folgenden Aufstellung bedeutet ‘------‘, dass keine Aussage getroffen werden kann, wenn nur das Ergebnis des Vergleichs mit einem s bekannt ist.
x <compare> <quantifier> S, wobei compare ::= comp_op | equal_or_not
|
quantifier ::= ALL |
quantifier ::= ANY | SOME |
S ist leer |
wahr |
falsch |
x <compare> S ist wahr für mindestens ein s aus S |
------ |
wahr |
x <compare> S ist wahr für alle s aus S |
wahr |
wahr |
x <compare> S ist für keinen Wert s aus S falsch und ist wenigstens für einen Wert s undefiniert |
undefiniert |
|
S enthält NULL-Werte und x <compare> S ist wahr für alle anderen s |
undefiniert |
wahr |
x <compare> S ist für wenigstens einen Wert s aus S falsch |
falsch |
------ |
x <compare> S ist falsch für alle s aus S |
falsch |
falsch |
x <compare> S ist für keinen Wert aus aus S wahr und für wenigstens einen Wert s undefiniert |
|
undefiniert |
S enthält NULL-Werte und x <compare> S ist falsch für alle anderen s |
falsch |
undefiniert |
Beispieltabelle hotel
Liste von Hotels, die dieselben Namen haben wie irgendwelche Orte in der Basistabelle.
SELECT name, city FROM hotel
WHERE name = ANY (SELECT city FROM hotel)
Die Subquery SELECT city FROM hotel ermittelt die Ortsnamenliste, mit der die Hotelnamen verglichen werden.
NAME |
CITY |
Los Angeles |
Cincinatti |
Long Beach |
Long Beach |
Dallas |
Dallas |