В 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.