MySQL 运算符优先级
运算符优先级(运算顺序)是一组规则,反映了首先执行哪些过程的约定以便计算给定的表达式。
例如,乘法的优先级高于加法。因此,表达式 1 + 2 × 3 被解释为具有值 1 + (2 × 3) = 7,而不是 (1 + 2) × 3 = 9。当表达式中使用指数时,它优先于两者加法和乘法。因此 3 + 52 = 28 和 3 × 52 = 75。
示例:
考虑以下表达式:
-- 首先计算 5 * 2
Result1 = 15 - 5 * 2;
-- 上述表达式等效于
Result2 = 15 - (5 * 2);
-- 强制编译器先计算15-5
Result3 = (15 - 5) * 2;
现在,考虑一个名为 Sample 的数据库表,其中包含以下记录:
Data | Var1 | Var2 |
---|---|---|
Data1 | 10 | 1 |
Data2 | 15 | 2 |
Data3 | 20 | 3 |
Data4 | 25 | 4 |
Data5 | 30 | 5 |
Data6 | 35 | 6 |
上面讨论的内容可以应用于表 Sample.考虑下面的示例:
SELECT *,
Var1 - Var2 * 2 AS Result1,
Var1 - (Var2 * 2) AS Result2,
(Var1 - Var2) * 2 AS Result3
FROM Sample;
上面的查询将产生以下结果:
Data | Var1 | Var2 | Result1 | Result2 | Result3 |
---|---|---|---|---|---|
Data1 | 10 | 1 | 8 | 8 | 18 |
Data2 | 15 | 2 | 11 | 11 | 26 |
Data3 | 20 | 3 | 14 | 14 | 34 |
Data4 | 25 | 4 | 17 | 17 | 42 |
Data5 | 30 | 5 | 20 | 20 | 50 |
Data6 | 35 | 6 | 23 | 23 | 58 |
MySQL 运算符优先级表
下表列出了 MySQL 运算符的优先级。运算符按优先级降序从上到下列出。优先级较高的运算符先于优先级相对较低的运算符进行计算。
优先级 | 运算符 |
---|---|
17 | INTERVAL |
16 | BINARY, COLLATE |
15 | ! |
14 | - (Unary minus), ~ (Unary bit inversion) |
13 | ^ |
12 | *, /, DIV, %, MOD |
11 | -, + |
10 | <<, >> |
9 | & |
8 | | |
7 | = (Comparison), <=>, >=, >, <=, >, <>, !=, IS, LIKE, REGEXP, IN, MEMBER OF |
6 | BETWEEN, CASE, WHEN, THEN, ELSE, END |
5 | NOT |
4 | AND, && (Logical and) |
3 | XOR |
2 | OR, || (Logical or) |
1 | = (Assignment), := |