В 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; -> 1a XOR bматематически эквалиентно(a AND (NOT b)) OR ((NOT a) and b).XORбыл реализован в 4.0.2.