Vergleichsoperationen haben einen der Werte 1
(TRUE
), 0
(FALSE
) oder NULL
zum
Ergebnis. Diese Operationen funktionieren bei Zahlen und Strings
gleichermaßen: Nach Bedarf werden Strings in Zahlen und Zahlen
in Strings umgewandelt.
Einige der in diesem Abschnitt beschriebenen Funktionen (z. B.
LEAST()
und GREATEST()
)
geben andere Werte als 1
(TRUE
), 0
(FALSE
) oder NULL
zurück.
Der Rückgabewert basiert jedoch auf Vergleichsoperationen, die
entsprechend den in Abschnitt 12.1.2, „Typumwandlung bei der Auswertung von Ausdrücken“
beschriebenen Regeln durchgeführt wurden.
Um einen Wert zu Vergleichszwecken in einen beliebigen Typ zu
konvertieren, können Sie die Funktion CAST()
verwenden. String-Werte lassen sich mithilfe von
CONVERT()
in einen anderen Zeichensatz
konvertieren. Siehe auch Abschnitt 12.8, „Cast-Funktionen und Operatoren“.
Standardmäßig wird die Groß-/Kleinschreibung bei
String-Vergleichen nicht unterschieden. Ferner wird hierbei der
aktuelle Zeichensatz verwendet. Die Vorgabe ist
latin1
(cp1252 West European). Dieser
Zeichensatz ist auch für Deutsch geeignet.
Gleich:
mysql>SELECT 1 = 0;
-> 0 mysql>SELECT '0' = 0;
-> 1 mysql>SELECT '0.0' = 0;
-> 1 mysql>SELECT '0.01' = 0;
-> 0 mysql>SELECT '.01' = 0.01;
-> 1
NULL
-sicheres Gleich. Dieser Operator
führt ebenso wie =
eine
Vergleichsoperation durch, gibt aber 1
statt NULL
zurück, wenn beide Operanden
NULL
sind, und 0
statt
NULL
, wenn einer der Operanden
NULL
ist.
mysql>SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
-> 1, 1, 0 mysql>SELECT 1 = 1, NULL = NULL, 1 = NULL;
-> 1, NULL, NULL
Ungleich:
mysql>SELECT '.01' <> '0.01';
-> 1 mysql>SELECT .01 <> '0.01';
-> 0 mysql>SELECT 'zapp' <> 'zappp';
-> 1
Kleiner oder gleich:
mysql> SELECT 0.1 <= 2;
-> 1
Kleiner als:
mysql> SELECT 2 < 2;
-> 0
Größer oder gleich:
mysql> SELECT 2 >= 2;
-> 1
Größer als:
mysql> SELECT 2 > 2;
-> 0
IS
,
boolean_value
IS NOT
boolean_value
Vergleicht einen Wert mit einem booleschen Wert, wobei
boolean_value
TRUE
, FALSE
oder
UNKNOWN
sein kann.
mysql>SELECT 1 IS TRUE, 0 IS FALSE, NULL IS UNKNOWN;
-> 1, 1, 1 mysql>SELECT 1 IS NOT UNKNOWN, 0 IS NOT UNKNOWN, NULL IS NOT UNKNOWN;
-> 1, 1, 0
Prüft, ob ein Wert NULL
ist oder nicht.
mysql>SELECT 1 IS NULL, 0 IS NULL, NULL IS NULL;
-> 0, 0, 1 mysql>SELECT 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;
-> 1, 1, 0
Zum Zwecke der Kompatibilität mit ODBC-Programmen
unterstützt MySQL die folgenden Zusatzfunktionen bei der
Verwendung von IS NULL
:
Sie können den Datensatz, der den aktuellen
AUTO_INCREMENT
-Wert enthält, durch
Absetzen einer Anweisung der folgenden Form unmittelbar
nach Erzeugung des Werts ermitteln:
SELECT * FROMtbl_name
WHEREauto_col
IS NULL
Dieses Verhalten kann mithilfe von
SQL_AUTO_IS_NULL=0
deaktiviert
werden. Siehe auch Abschnitt 13.5.3, „SET
“.
Bei DATE
- und
DATETIME
- Spalten, die als
NOT NULL
deklariert sind, können Sie
das Sonderdatum '0000-00-00'
mithilfe
einer Anweisung wie der folgenden ermitteln:
SELECT * FROMtbl_name
WHEREdate_column
IS NULL
Dies ist erforderlich, um einige ODBC-Anwendungen zum
Laufen zu bringen, weil ODBC den Datumswert
'0000-00-00'
nicht unterstützt.
Wenn expr
größer oder gleich
min
und
expr
kleiner oder gleich
max
ist, gibt
BETWEEN
1
zurück,
andernfalls 0
. Dies ist äquivalent zu
dem Ausdruck (
, sofern alle
Argumente vom selben Typ sind. Andernfalls findet die
Typenkonvertierung entsprechend den in
Abschnitt 12.1.2, „Typumwandlung bei der Auswertung von Ausdrücken“, beschriebenen Regeln
statt, wird aber auf alle drei Argumente angewendet.
min
<=
expr
AND
expr
<=
max
)
mysql>SELECT 1 BETWEEN 2 AND 3;
-> 0 mysql>SELECT 'b' BETWEEN 'a' AND 'c';
-> 1 mysql>SELECT 2 BETWEEN 2 AND '3';
-> 1 mysql>SELECT 2 BETWEEN 2 AND 'x-3';
-> 0
Dies ist das Gleiche wie NOT
(
.
expr
BETWEEN
min
AND
max
)
Gibt den ersten Nicht-NULL
-Wert in der
Liste oder aber NULL
zurück, sofern
keine Nicht-NULL
-Werte vorhanden sind.
mysql>SELECT COALESCE(NULL,1);
-> 1 mysql>SELECT COALESCE(NULL,NULL,NULL);
-> NULL
Gibt von zwei oder mehr Argumenten das größte (d. h. das
mit dem höchsten Wert) zurück. Die Argumente werden nach
denselben Regeln wie bei LEAST()
verglichen.
mysql>SELECT GREATEST(2,0);
-> 2 mysql>SELECT GREATEST(34.0,3.0,5.0,767.0);
-> 767.0 mysql>SELECT GREATEST('B','A','C');
-> 'C'
GREATEST()
gibt NULL
zurück, sofern ein Argument NULL
ist.
Gibt 1
zurück, wenn
expr
gleich einem der Werte in
der IN
-Liste ist, andernfalls wird
0
zurückgegeben. Wenn alle Werte
Konstanten sind, werden sie entsprechend dem Typ von
expr
ausgewertet und sortiert.
Nachfolgend erfolgt die Suche nach dem Element unter
Verwendung einer binären Suche. Das heißt auch, dass
IN
sehr schnell ist, wenn die
IN
-Werteliste ausschließlich aus
Konstanten besteht. Andernfalls findet die
Typenkonvertierung entsprechend den in
Abschnitt 12.1.2, „Typumwandlung bei der Auswertung von Ausdrücken“, beschriebenen Regeln
statt, wird aber auf alle Argumente angewendet.
mysql>SELECT 2 IN (0,3,5,'wefwf');
-> 0 mysql>SELECT 'wefwf' IN (0,3,5,'wefwf');
-> 1
Die Anzahl der Werte in der IN
-Liste wird
nur durch den Wert von max_allowed_packet
beschränkt.
Um mit dem SQL-Standard konform zu gehen, gibt
IN
NULL
nicht nur dann
zurück, wenn der Ausdruck auf der linken Seite
NULL
ist, sondern auch dann, wenn keine
Übereinstimmung in der Liste gefunden wird und einer der
Ausdrücke in der Liste NULL
ist.
Die IN()
-Syntax kann auch zum Schreiben
verschiedener Arten von Unterabfragen verwendet werden.
Siehe auch Abschnitt 13.2.8.3, „Unterabfragen mit ANY
, IN
und
SOME
“.
Dies ist das Gleiche wie NOT
(
.
expr
IN
(value
,...))
Wenn expr
NULL
ist, gibt ISNULL()
1
zurück, andernfalls 0
.
mysql>SELECT ISNULL(1+1);
-> 0 mysql>SELECT ISNULL(1/0);
-> 1
ISNULL()
kann anstelle von
=
verwendet werden, um zu überprüfen,
ob ein Wert NULL
ist. (Der Vergleich
eines Werts mit NULL
unter Verwendung von
=
gibt immer FALSE
aus.)
Die Funktion ISNULL()
weist einige
spezielle Eigenschaften des Vergleichsoperators IS
NULL
auf. Siehe auch die Beschreibung zu
IS NULL
.
Gibt 0
zurück, wenn
N
<
N1
ist, 1
,
wenn N
<
N2
usw., oder
-1
, wenn N
NULL
ist. Alle Argumente werden als
Integers behandelt. Es ist erforderlich, dass
N1
<
N2
<
N3
< ...
< Nn
ist, damit diese Funktion
einwandfrei arbeitet. Das liegt daran, dass eine binäre
(und damit sehr schnelle) Suche verwendet wird.
mysql>SELECT INTERVAL(23, 1, 15, 17, 30, 44, 200);
-> 3 mysql>SELECT INTERVAL(10, 1, 10, 100, 1000);
-> 2 mysql>SELECT INTERVAL(22, 23, 30, 44, 200);
-> 0
Gibt von zwei oder mehr Argumenten das kleinste (d. h. das mit dem niedrigsten Wert) zurück. Die Argumente werden unter Anwendung der folgenden Regeln verglichen:
Wenn der Rückgabewert in einem
INTEGER
-Kontext verwendet wird oder
alle Argumente Integer-Werte sind, dann werden sie als
Integers verglichen.
Wenn der Rückgabewert in einem
REAL
-Kontext verwendet wird oder alle
Argumente reale Zahlen sind, dann werden sie als reale
Zahlen verglichen.
Ist ein Argument ein String mit Unterscheidung der Groß-/Kleinschreibung, dann werden die Argumente als Strings mit Unterscheidung der Groß-/Kleinschreibung verglichen.
In allen anderen Fällen werden die Argumente als Strings ohne Unterscheidung der Groß-/Kleinschreibung verglichen.
LEAST()
gibt NULL
zurück, sofern ein Argument NULL
ist.
mysql>SELECT LEAST(2,0);
-> 0 mysql>SELECT LEAST(34.0,3.0,5.0,767.0);
-> 3.0 mysql>SELECT LEAST('B','A','C');
-> 'A'
Beachten Sie, dass die oben beschriebenen Konvertierungsregeln in einigen Grenzfällen fragwürdige Ergebnisse erzeugen können:
mysql> SELECT CAST(LEAST(3600, 9223372036854775808.0) as SIGNED);
-> -9223372036854775808
Dies passiert, weil MySQL
9223372036854775808.0
in einem
Integer-Kontext liest. Das Integer-Format ist aber nicht
geeignet, den Wert darzustellen, d. h., er wird in einen
vorzeichenbehafteten Integer umgewandelt.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.