MENU
Operators
To illustrate MySQL's operators and built-in functions, most examples in this section (3.7) use the SELECT clause, but the same operators and functions may be used in other clauses such as WHERE and HAVING.The operators below are listed from highest to lowest precedence — an operator earlier in the list binds more tightly than one that follows it:
| BINARY (binary string casting), COLLATE ! - (unary minus), ~ (unary bit inversion) ^ (bitwise XOR) *, /, DIV (integer division), %, MOD (same as %) -, + << (bit left shift), >> (bit right shift) & (bitwise AND) | = (comparison), <=> (NULL-safe equal), >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN BETWEEN...AND CASE...WHEN...THEN...ELSE...END NOT &&, AND XOR ||, OR = (assignment), := |
Arithmetic and Bitwise
| SELECT 11 DIV 2; |
Integer division, discarding the remainder: 5.
SELECT 11 DIV 2;| 11 DIV 2 |
|---|
| 5 |
Comparison
| SELECT 1 = 1, NULL = NULL, 1 = NULL; |
1, NULL, NULL — any comparison against NULL with plain = yields NULL, never TRUE or FALSE.
| SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL; |
1, 1, 0 — the NULL-safe equal operator treats NULL as a comparable value instead of propagating NULL.
| SELECT 1 IS TRUE, 0 IS FALSE, NULL IS UNKNOWN, NULL IS NOT UNKNOWN; |
1, 1, 1, 0
| SELECT 0 IS NULL, 0 IS NOT NULL, FALSE IS NULL, NULL IS FALSE; |
0, 1, 0, 0 — note that NULL IS FALSE is 0, not 1; see NULL Handling for more on three-valued logic.
SELECT 1 = 1, NULL = NULL, 1 = NULL;
SELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;
SELECT 1 IS TRUE, 0 IS FALSE, NULL IS UNKNOWN, NULL IS NOT UNKNOWN;
SELECT 0 IS NULL, 0 IS NOT NULL, FALSE IS NULL, NULL IS FALSE;| 1 = 1 | NULL = NULL | 1 = NULL |
|---|---|---|
| 1 | NULL | NULL |
| 1 <=> 1 | NULL <=> NULL | 1 <=> NULL |
|---|---|---|
| 1 | 1 | 0 |
| 1 IS TRUE | 0 IS FALSE | NULL IS UNKNOWN | NULL IS NOT UNKNOWN |
|---|---|---|---|
| 1 | 1 | 1 | 0 |
| 0 IS NULL | 0 IS NOT NULL | FALSE IS NULL | NULL IS FALSE |
|---|---|---|---|
| 0 | 1 | 0 | 0 |
LIKE and Wildcards
| SELECT 'ab' LIKE 'a%b', 'axxb' LIKE 'a%b', 'abx' LIKE 'a%b'; |
1, 1, 0 — % matches any number of characters, _ matches exactly one.
| SELECT 'ab' LIKE 'a_b', 'axb' LIKE 'a_b', 'axxb' LIKE 'a_b'; |
0, 1, 0
| SELECT 'a_b%' LIKE 'a\_b\%'; SELECT 'a_b%' NOT LIKE 'a\_b\%'; |
1, 0 — a backslash escapes a literal _ or % inside the pattern.
SELECT 'ab' LIKE 'a%b', 'axxb' LIKE 'a%b', 'abx' LIKE 'a%b';
SELECT 'ab' LIKE 'a_b', 'axb' LIKE 'a_b', 'axxb' LIKE 'a_b';
SELECT 'a_b%' LIKE 'a\_b\%';
SELECT 'a_b%' NOT LIKE 'a\_b\%';| 'ab' LIKE 'a%b' | 'axxb' LIKE 'a%b' | 'abx' LIKE 'a%b' |
|---|---|---|
| 1 | 1 | 0 |
| 'ab' LIKE 'a_b' | 'axb' LIKE 'a_b' | 'axxb' LIKE 'a_b' |
|---|---|---|
| 0 | 1 | 0 |
| 'a_b%' LIKE 'a\_b\%' |
|---|
| 1 |
| 'a_b%' NOT LIKE 'a\_b\%' |
|---|
| 0 |
| SELECT * FROM Tags WHERE '|ruby|rails|scruffy|rubyonrails|' LIKE CONCAT('%|', Name, '|%'); |
| SELECT * FROM mytable WHERE column1 LIKE '%word1%' OR column1 LIKE '%word2%' OR column1 LIKE '%word3%'; |
REGEXP / RLIKE
| SELECT 'abc' REGEXP '^[a-d]*'; SELECT 'x\n' REGEXP 'X\n', 'x\n' REGEXP BINARY 'X\n'; SELECT 'a' NOT REGEXP 'A'; |
1; 1, 0 (BINARY forces a case-sensitive byte comparison); 0 — [NOT] RLIKE is a synonym for [NOT] REGEXP. See Regular Expression for the full REGEXP_* function family.
SELECT 'abc' REGEXP '^[a-d]*';
SELECT 'x\n' REGEXP 'X\n', 'x\n' REGEXP BINARY 'X\n';
SELECT 'a' NOT REGEXP 'A';| 'abc' REGEXP '^[a-d]*' |
|---|
| 1 |
| 'x\n' REGEXP 'X\n' | 'x\n' REGEXP BINARY 'X\n' |
|---|---|
| 1 | 0 |
| 'a' NOT REGEXP 'A' |
|---|
| 0 |
IN and BETWEEN
| SELECT 'a' IN ('ab','0','c'); SELECT 10 NOT IN (10,20,30); |
0; 0
| SELECT 4 BETWEEN '4' AND 5; SELECT 'y' BETWEEN 'x' AND 'Z'; SELECT 2 NOT BETWEEN 3 AND 1; |
1; 1 (string comparison); 1 — BETWEEN does not reorder its bounds, so a NOT BETWEEN with a reversed range is always true.
SELECT 'a' IN ('ab','0','c');
SELECT 10 NOT IN (10,20,30);
SELECT 4 BETWEEN '4' AND 5;
SELECT 'y' BETWEEN 'x' AND 'Z';
SELECT 2 NOT BETWEEN 3 AND 1;| 'a' IN ('ab','0','c') |
|---|
| 0 |
| 10 NOT IN (10,20,30) |
|---|
| 0 |
| 4 BETWEEN '4' AND 5 |
|---|
| 1 |
| 'y' BETWEEN 'x' AND 'Z' |
|---|
| 1 |
| 2 NOT BETWEEN 3 AND 1 |
|---|
| 1 |
Assignment
| SELECT @a:=5, @b=5; |
:= assigns 5 to the session variable @a (and evaluates to 5); plain = here is an ordinary comparison between the (still unset) @b and 5, yielding NULL.
SELECT @a:=5, @b=5;
-- Assignment operator vs comparison operator
SET @a := 0;
SELECT @a := @a + 1 AS assigned, @a = 1 AS compared;| @a:=5 | @b=5 |
|---|---|
| 5 | NULL |
| assigned | compared |
|---|---|
| 1 | 1 |