MySQL 支援豐富的運算子類別,掌握其語法與優先順序能撰寫更精確、高效的 SQL 表達式。本文系統整理五大類運算子與完整優先順序表。
| 運算子 | 說明 | 範例 | 結果 |
|---|---|---|---|
+ | 加法 | SELECT 1+2 | 3 |
- | 減法 | SELECT 2-1 | 1 |
* | 乘法 | SELECT 2*3 | 6 |
/ | 除法(浮點) | SELECT 5/3 | 1.666... |
DIV | 整數除法(商) | SELECT 5 DIV 2 | 2 |
% / MOD() | 取餘數 | SELECT 5%2, MOD(5,2) | 1, 1 |
| 運算子 | 說明 | 範例 |
|---|---|---|
= | 等於 | SELECT 1=0, 1=1, NULL=NULL → 0, 1, NULL |
<>, != | 不等於 | SELECT 1<>0, 1<>1, NULL<>NULL → 1, 0, NULL |
<=> | 安全等於(NULL 可比) | SELECT 1<=>1, NULL<=>NULL → 1, 1 |
<, <=, >, >= | 大小比較 | 字串按字典序,數值按大小 |
BETWEEN ... AND ... | 範圍包含 | SELECT 10 BETWEEN 10 AND 20 → 1 |
IN (...) | 集合成員 | SELECT 1 IN (1,2,3), 't' IN ('t','a','b') → 1, 1 |
IS NULL | 判斷 NULL | SELECT 0 IS NULL, NULL IS NULL → 0, 1 |
IS NOT NULL | 判斷非 NULL | SELECT 0 IS NOT NULL, NULL IS NOT NULL → 1, 0 |
LIKE | 模糊匹配 | SELECT '123456' LIKE '123%' → 1 |
REGEXP | 正則表達式 | SELECT 'abcdef' REGEXP 'ab' → 1 |
| 運算子 | 說明 | 範例 |
|---|---|---|
NOT, ! | 邏輯非 | SELECT NOT 0, NOT 1, NOT NULL → 1, 0, NULL |
AND, && | 邏輯與 | SELECT 1 AND 1, 0 AND 1, 1 AND NULL → 1, 0, NULL |
OR, || | 邏輯或 | SELECT 1 OR 0, 0 OR 0, 1 OR NULL → 1, 0, 1 |
XOR | 邏輯異或 | SELECT 1 XOR 1, 1 XOR 0 → 0, 1 |
| 運算子 | 說明 | 範例 | 結果 |
|---|---|---|---|
& | 位元 AND | SELECT 2 & 3 | 2 |
| | 位元 OR | SELECT 2 | 3 | 3 |
^ | 位元 XOR | SELECT 2 ^ 3 | 1 |
~ | 位元取反 | SELECT ~1 | -2 |
>> | 右移 | SELECT 100 >> 3 | 12 |
<< | 左移 | SELECT 100 << 3 | 800 |
| 優先級 | 運算子 |
|---|---|
| 最高 | := (賦值) |
| 1 | ||, OR, XOR |
| 2 | &&, AND |
| 3 | BETWEEN, CASE, WHEN, THEN, ELSE |
| 4 | =, <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN |
| 5 | | |
| 6 | & |
| 7 | <<, >> |
| 8 | -, + |
| 9 | *, /, DIV, %, MOD |
| 10 | ^ |
| 11 | - (一元負號), ~ (一元位元反轉) |
| 12 | !, NOT |
| 最低 | BINARY, COLLATE |
實務提醒:複雜表達式建議使用括號明確分組,避免優先順序導致邏輯錯誤,提升程式碼可讀性。