:: DEVELOPER ZONE
В SQL, все логические операторы возвращают
TRUE (ИСТИНА), FALSE (ЛОЖЬ) или NULL (UNKNOWN, неизвестно).
В MySQL это реализовано как 1
(TRUE, ИСТИНА), 0
(FALSE, ЛОЖЬ)
или NULL
. Это справедливо для большинства SQL СУБД, однако некоторые
возвращают любое положительное значение как значение TRUE.
NOT
, !
Логическое НЕ.
Возвращает 1
, если операнд равен 0
, 0
если операнд -
ненулевая величина, и NOT NULL
возвращает NULL
.
mysql> SELECT NOT 10; -> 0 mysql> SELECT NOT 0; -> 1 mysql> SELECT NOT NULL; -> NULL mysql> SELECT ! (1+1); -> 0 mysql> SELECT ! 1+1; -> 1
Последний пример дает 1
, поскольку данное выражение вычисляется тем же
способом, что и (!1)+1
.
AND
, &&
Логическое И.
Дает 1
если все операнды ненулевые и не NULL
, 0
если один
или более операндов равны 0
, или NULL
в остальных случаях.
mysql> SELECT 1 && 1; -> 1 mysql> SELECT 1 && 0; -> 0 mysql> SELECT 1 && NULL; -> NULL mysql> SELECT 0 && NULL; -> 0 mysql> SELECT NULL && 0; -> 0
Обратите внимание, что версии MySQL до 4.0.5 прекращали вычисление, встретив
первый NULL
, вместо того, чтобы продолжать вычисление выражений с целью
нахождения возможных значений 0
. Это означает, что в этих версиях
выражение SELECT (NULL AND 0)
возвращает NULL
вместо 0
. В
4.0.5 код был переписан так, чтобы оптимизация сохранилась, но результат всегда
был таков, как требует того ANSI.
OR
, ||
Логическое ИЛИ.
Возвращает 1
, если любой из операндов не 0
, NULL
если один
из операндов NULL
, в остальных случаях возвращает 0
.
mysql> SELECT 1 || 1; -> 1 mysql> SELECT 1 || 0; -> 1 mysql> SELECT 0 || 0; -> 0 mysql> SELECT 0 || NULL; -> NULL mysql> SELECT 1 || NULL; -> 1
XOR
Логический XOR (побитовое сложение по модулю 2) Возвращает NULL
если
любой из операндов - NULL
. Для не-NULL
операндов, возвращает
1
если нечетное количество операндов - не 0
.
mysql> SELECT 1 XOR 1; -> 0 mysql> SELECT 1 XOR 0; -> 1 mysql> SELECT 1 XOR NULL; -> NULL mysql> SELECT 1 XOR 1 XOR 1; -> 1
a XOR b
математически эквалиентно
(a AND (NOT b)) OR ((NOT a) and b)
.
XOR
был реализован в 4.0.2.
© 1995-2005 MySQL AB. All rights reserved.