Ein Vergleichsprädikat (comparison_predicate) ist eine Prädikat, das einen Vergleich zweier Werte bzw. Wertelisten spezifiziert.
<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 !>
SQL-Tutorial, Bedingungen: Vergleich, AND, OR, BETWEEN,
IN,
Subquery: Innere
Abfragen
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.
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.
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: