This documentation is for an older version. If you're using the most current version, select the documentation for that version with the version switch in the upper right corner of the online documentation, or by downloading a newer PDF or EPUB file.

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`

.Note that the precedence of the

`NOT`

operator changed in MySQL 5.0.2. See Section 12.3.1, “Operator Precedence”.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 AND 1;`

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

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

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

-> 0`SELECT NULL AND 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 OR 1;`

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

-> 0 mysql>`SELECT 0 OR 0;`

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

-> 1`SELECT 1 OR 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)`

.