Das IN-Prädikat (in_predicate) prüft, ob ein Wert bzw. eine Werteliste in einer vorgegebenen Wertemenge bzw. Menge von Wertelisten enthalten ist.
<in_predicate> ::=
<expression> [NOT] IN <subquery>
| <expression> [NOT] IN <expression_list>
| <expression_list> [NOT] IN <subquery>
| <expression_list> [NOT] IN
(<expression_list>,...)
expression, expression_list, subquery
Die Subquery (subquery) muss eine Ergebnistabelle (siehe Ergebnistabellenname) liefern, die so viele Spalten enthält wie Werte durch den Ausdruck (expression) auf der linken Seite des Operators IN angegeben sind.
Jede auf der rechten Seite des Operators IN angegebene Werteliste muss so viele Werte enthalten, wie in der Werteliste auf der linken Seite des Operators IN angegeben sind.
·
x [NOT] IN
S, wobei x <expression> und S <subquery> oder <expression_list>
Der Wert x und die Werte in S müssen miteinander vergleichbar sein.
·
x [NOT] IN
S, wobei x <expression_list> mit den Werten x1, x2, ..., xn und S <subquery> (Menge von Wertelisten s) oder (<expression_list>,...) (Folge von Wertelisten s) mit den Wertelisten s: s1, s2, ...,
sn
Ein Wert xm muss mit allen Werten sm vergleichbar sein.
x=s ist wahr, wenn xm=sm, m=1,...,n
x=s ist falsch, wenn es mindestens ein m gibt, für das xm=sm falsch ist
x=s ist undefiniert, wenn es kein m gibt, für das xm=sm falsch ist, und es
mindestens ein m gibt, für das xm=sm undefiniert ist.
In der folgenden Aufstellung bedeutet ‘------‘, daß keine Aussage getroffen werden kann, wenn nur das Ergebnis des Vergleichs mit einem s bekannt ist.
|
Ergebnis der Funktion x IN S |
x=s ist wahr für mindestens ein s |
wahr |
x=s ist wahr für alle s |
wahr |
S enthält NULL-Werte und x=s ist wahr für die übrigen s |
wahr |
S ist leer |
falsch |
x=s ist falsch für mindestens ein s |
------ |
x=s ist falsch für alle s |
falsch |
S enthält NULL-Werte und x=s ist falsch für die übrigen s |
undefiniert |
x=s ist für kein s wahr und ist für wenigstens einen Wert s undefiniert |
undefiniert |
x NOT IN S hat das gleiche Ergebnis wie NOT(x IN S)
Beispieltabelle customer
Auswahl aller Kunden, die natürliche Personen (keine Firmen) sind:
SELECT title, firstname, name, city FROM customer
WHERE title IN ('Mr','Mrs')
TITLE |
FIRSTNAME |
NAME |
CITY |
Mrs |
Jenny |
Porter |
New York |
Mr |
Martin |
Porter |
Los Angeles |
Mrs |
Sally |
Peters |
Los Angeles |
Mr |
Peter |
Brown |
Hollywood |
Mr |
Michael |
Porter |
New York |
Mr |
George |
Howe |
New York |
Mr |
Frank |
Randolph |
Los Angeles |
Mr |
Joseph |
Peters |
Los Angeles |
Mrs |
Susan |
Brown |
Los Angeles |
Mr |
Anthony |
Jackson |
Los Angeles |
Mr |
Thomas |
Adams |
Los Angeles |
Mr |
Mark |
Griffith |
New York |
Mrs |
Rose |
Brown |
Hollywood |