## Vergleichsprädikat (comparison_predicate)

Ein Vergleichsprädikat (comparison_predicate) ist eine Prädikat, das einen Vergleich zweier Werte bzw. Wertelisten spezifiziert.

### Syntax

<comparison_predicate> ::=
<expression> <comp_op> <expression>
| <expression> <comp_op> <subquery>
| <expression_list> <equal_or_not> (<expression_list>)
| <expression_list> <equal_or_not> <subquery>

Für den Vergleich zweier Werte stehen folgende Vergleichsoperatoren zur Verfügung:
<comp_op> ::= < | > | <> | != | = | <= | >=
| ~= <! für Rechner mit ASCII-Code !>
| ~< <! für Rechner mit ASCII-Code !>
| ~> <! für Rechner mit ASCII-Code !>

Für den Vergleich zweier Wertelisten stehen nur die folgenden Vergleichsoperatoren zur Verfügung:
<equal_or_not> ::= <> | =
| ~= <! für Rechner mit ASCII-Code !>

### Beispiele

SQL-Tutorial, Bedingungen: Vergleich, AND, OR, BETWEEN, IN, Subquery: Innere Abfragen

### Erläuterung

Die Subquery subquery muss eine Ergebnistabelle 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.

### Vergleich zweier Werte

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, UNICODE) oder binären Nullen (Codeattribut BYTE) enthalten, so werden diese entfernt.
Wenn die Zeichenketten die unterschiedlichen Codeattribute ASCII und UNICDODE besitzen, wird die Zeichenkette mit dem Codeattribut ASCII 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, 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.

### Vergleich zweier Wertelisten

Wenn auf der linken Seite der Vergleichsoperators 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.

Siehe auch:

Mengenvergleichsprädikat

DEFAULT-Prädikat