In SQL, all logical operators evaluate to
`TRUE`

, `FALSE`

, or
`NULL`

(`UNKNOWN`

). In MySQL,
these are implemented as 1 (`TRUE`

), 0
(`FALSE`

), and `NULL`

. Most of
this is common to different SQL database servers, although some
servers may return any nonzero value for
`TRUE`

.

MySQL evaluates any nonzero, non-`NULL`

value
to `TRUE`

. For example, the following
statements all assess to `TRUE`

:

mysql>-> 1 mysql>`SELECT 10 IS TRUE;`

-> 1 mysql>`SELECT -10 IS TRUE;`

-> 1`SELECT 'string' IS NOT NULL;`

Logical NOT. Evaluates to

`1`

if the operand is`0`

, to`0`

if the operand is nonzero, and`NOT NULL`

returns`NULL`

.mysql>

-> 0 mysql>`SELECT NOT 10;`

-> 1 mysql>`SELECT NOT 0;`

-> NULL mysql>`SELECT NOT NULL;`

-> 0 mysql>`SELECT ! (1+1);`

-> 1`SELECT ! 1+1;`

The last example produces

`1`

because the expression evaluates the same way as`(!1)+1`

.Logical AND. Evaluates to

`1`

if all operands are nonzero and not`NULL`

, to`0`

if one or more operands are`0`

, otherwise`NULL`

is returned.mysql>

-> 1 mysql>`SELECT 1 && 1;`

-> 0 mysql>`SELECT 1 && 0;`

-> NULL mysql>`SELECT 1 && NULL;`

-> 0 mysql>`SELECT 0 && NULL;`

-> 0`SELECT NULL && 0;`

Logical OR. When both operands are non-

`NULL`

, the result is`1`

if any operand is nonzero, and`0`

otherwise. With a`NULL`

operand, the result is`1`

if the other operand is nonzero, and`NULL`

otherwise. If both operands are`NULL`

, the result is`NULL`

.mysql>

-> 1 mysql>`SELECT 1 || 1;`

-> 1 mysql>`SELECT 1 || 0;`

-> 0 mysql>`SELECT 0 || 0;`

-> NULL mysql>`SELECT 0 || NULL;`

-> 1`SELECT 1 || NULL;`

Logical XOR. Returns

`NULL`

if either operand is`NULL`

. For non-`NULL`

operands, evaluates to`1`

if an odd number of operands is nonzero, otherwise`0`

is returned.mysql>

-> 0 mysql>`SELECT 1 XOR 1;`

-> 1 mysql>`SELECT 1 XOR 0;`

-> NULL mysql>`SELECT 1 XOR NULL;`

-> 1`SELECT 1 XOR 1 XOR 1;`

`a XOR b`

is mathematically equal to`(a AND (NOT b)) OR ((NOT a) and b)`

.