Anfang des Inhaltsbereichs

Mengenvergleichsprädikat (quantified_predicate) 

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.

Syntax

<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>

subquery, expression_list

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).

Erläuterung

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

 

Ende des Inhaltsbereichs