Ein Vergleichsprädikat (comparison_predicate) spezifiziert einen Vergleich zweier Werte bzw. Wertelisten.
<comparison_predicate> ::= <expression> <comp_op>
<expression>
| <expression> <comp_op> <subquery>
| <expression_list> <equal_or_not> (<expression_list>)
| <expression_list> <equal_or_not>
<subquery>
expression, expression_list, subquery
Für den Vergleich zweier Werte stehen
folgende Vergleichsoperatoren zur Verfügung:
<, >, <>, !=, =, <=, >= (comp_op)
Für den Vergleich zweier Wertelisten stehen nur die Vergleichsoperatoren = und <> zur Verfügung (equal_or_not).
Die Subquery (subquery) muss eine Ergebnistabelle (siehe Ergebnistabellenname) liefern, die so viele Spalten enthält wie Werte auf der linken Seite des Operators angegeben sind. Diese Ergebnistabelle darf höchstens eine Zeile enthalten.
Die auf der rechten Seite des Vergleichsoperators equal_or_not angegebene Werteliste (expression_list) muss so viele Werte enthalten, wie in der Werteliste vor dem Vergleichsoperator equal_or_not angegeben sind.
Ein Spezialfall des Vergleichsprädikats ist das JOIN-Prädikat.
Sei x das Ergebnis des ersten Ausdrucks (expression) und y das Ergebnis des zweiten Ausdrucks oder der Subquery.
· Die Werte x und y müssen miteinander vergleichbar sein.
· Zahlen werden nach ihrem algebraischen Wert verglichen.
·
Der Vergleich von Zeichenketten erfolgt Zeichen
für Zeichen.
Wenn eine oder beide Zeichenketten am Ende Leerzeichen (Codeattribut
ASCII, EBCDIC, UNICODE) oder binären Nullen (Codeattribut BYTE) enthalten, so
werden diese entfernt.
Wenn die Zeichenketten die unterschiedliche Codeattribute ASCII und EBCDIC
besitzen, wird eine der beiden Zeichenketten implizit umgewandelt, so dass
beide vom gleichen Codeattribut sind.
Wenn die Zeichenketten die unterschiedlichen Codeattribute ASCII bzw. EBCDIC
und UNICDODE besitzen, wird die Zeichenkette mit dem Codeattribut ASCII bzw.
EBCDIC implizit in eine Zeichenkette mit dem Codeattribut UNICODE
umgewandelt.
Zwei Zeichenketten sind gleich, wenn sie an allen Positionen die jeweils
gleichen Zeichen enthalten.
Wenn zwei Zeichenketten nicht gleich sind, wird ihre Beziehung vom ersten sich
unterscheidenden Zeichen bestimmt, welches beim Vergleich von links nach
rechts gefunden wird. Dieser Vergleich wird gemäß dem für diese Spalte
gewählten Codeattribut (ASCII, EBCDIC, UNICODE oder BYTE)
ausgeführt.
· Wenn x oder y NULL-Werte sind, oder wenn das Ergebnis der Subquery leer ist, dann ist (x <comp_op> y) undefiniert.
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. y sei das Ergebnis der Subquery oder das Ergebnis der zweiten Werteliste. Eine Werteliste y setzt sich aus den Ergebnissen der Werte y1, y2, ..., yn zusammen.
· Ein Wert xm muss mit dem zugehörigen Wert ym vergleichbar sein.
· x=y ist wahr, wenn für alle m=1, ..., n gilt xm=ym
· x<>y ist wahr, wenn es mindestens ein m gibt, für das gilt xm<>ym.
· (x <equal_or_not> y) ist undefiniert, wenn es kein m gibt, für das (xm <equal_or_not> ym) falsch ist und es mindestens ein m gibt, für das (xm <equal_or_not> ym) 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.
Beispieltabelle customer
Welche Kunden sind Frauen?
SELECT title, firstname, name FROM customer
WHERE title = 'Mrs'
TITLE |
FIRSTNAME |
NAME |
Mrs |
Jenny |
Porter |
Mrs |
Sally |
Peters |
Mrs |
Susan |
Brown |
Mrs |
Rose |
Brown |