MySQL运算符

算数运算符

  • +-*/%
  • SELECT num, num+10.5, num-2, num/3, num%2 FROM tb

比较运算符

运算符作用
=等于
<=>安全的等于
<> !=不等于
<[=]小于[等于]
>[=]大于[等于]
IS NULL是否为 NULL
ISNULL同上
IS NOT NULL是否非 NULL
LEAST两个或多个参数时,返回最小值
GREATEST返回最大值
BETWEEN AND在两个值之间
[NOT] IN是否在列表中
LIKE通配符匹配
REGEXP正则表达式匹配
  • =: 当有NULL时,返回NULL
  • <=>: NULL 时,返回0, 或者1
  • ISNULL: 是否是NULL
  • expr BETWEEN min AND max: 在 minmax 之间
  • LEAST|GREATEST(value1, value2): 最小和最大
  • expr [NOT] IN (): 在和不在其中
  • LIKE: %匹配任何数目的字符,甚至包括零字符,_匹配一个字符
  • REGEXP: 正则

逻辑运算符

  • 逻辑运算符表
运算符作用
NOT!逻辑非
AND&&逻辑与
OR||逻辑或
XOR逻辑异或
  • SELECT NOT 8, NOT 0, NOT NULL, 1 AND 0, 8 AND 9, 0 AND NULL, 1 AND NULL, NULL AND NULL;

位运算符

  • 简介
运算符作用
|位或
&位与
^位异或
<<位左移
>>位右移
~位取反
- SELECT 10 | 15 | 2, 9 & 4 & 2, 9^4^2
  • expr << n: 将expr左移n位, 低位补0
  • expr >> n: 将expr右移n位,高位补0
  • SELECT BIN(~1)

运算符的优先级

  • 低到高…百度吧
<think> 我们拥有多个引用片段,其中引用[3]提供了最详细的MySQL运算符优先级列表。根据用户需求,我们需要系统介绍MySQL运算符优先级。 步骤: 1. 先总体说明运算符优先级的作用和重要性(参考引用[2]和引用[3]的开头部分)。 2. 按照优先级从高到低的顺序列出运算符(引用[3]提供了由低到高的顺序,但通常我们习惯从高到低说明,因此需要反转)。 3. 解释一些容易混淆的运算符优先级问题,并举例说明(引用[1]中有一个例子:3>2>=1 和 3>2>1)。 4. 强调圆括号可以改变优先级(引用[3]提到)。 5. 最后可以总结并给出编写SQL时的建议。 注意:引用[3]的列表是从低到高(数字1代表最低,15代表最高),所以我们要反过来,从最高优先级开始。 最高优先级(15):`!`(逻辑非)、`~`(位反转)、`-`(负号) 然后依次递减: 14:`^` 13:`*`、`/`、`%` 12:`-`(减号)、`+` 11:`<<`、`>>` 10:`&` 9:`|` 8:比较运算符(`=`, `<=>`, `>=`, `>`, `<=`, `<`, `<>`, `!=`, `IS`, `LIKE`, `REGEXP`, `IN`) 7:`BETWEEN`, `CASE`, `WHEN`, `THEN`, `ELSE` 6:`NOT` 5:`&&`, `AND` 4:`XOR` 3:`||`, `OR` 2:`:=`(赋值运算符,但在SELECT语句中一般不用,注意在SET语句中) 1:`=`(赋值运算,但在MySQL中,在SET语句或UPDATE语句的SET子句中) 但是,注意引用[3]中标注的数字是“由低到高”的顺序,所以数字1是最低优先级,15是最高优先级。因此,在介绍时,我们从15开始向下介绍。 另外,引用[1]中的例子: SELECT 3>2>=1; --> 1 (true) SELECT 3>2>1; --> 0 (false) 这是因为,第一个表达式相当于 (3>2) >= 1,而 (3>2)的结果是1(true),然后1>=1为true(1)。 第二个表达式相当于 (3>2)>1,3>2为1,然后1>1为false(0)。 因此,在介绍过程中,我们可以用这个例子来说明比较运算符的优先级相同,从左到右计算。 根据引用[4],我们还可以列出比较运算符和逻辑运算符,但优先级已经在引用[3]中给出。 回答结构: 1. 引言:运算符优先级的重要性(避免逻辑错误,编写清晰高效的SQL)。 2. 优先级列表(从高到低)以及简要说明。 3. 注意事项:相同优先级从左到右,圆括号的使用。 4. 示例说明(引用[1]的例子)。 5. 总结建议。 注意:MySQL中有些运算符有多个含义(比如`-`可以是负号也可以是减号),但优先级不同。 另外,赋值运算符在普通查询中不常用,但在变量赋值时需要注意。 由于用户要求用中文回答,且需要生成相关问题,我们在最后生成相关问题。 同时,在回答中引用末尾自然添加引用标识。 </think> ### MySQL运算符优先级详解 MySQL运算符优先级决定了表达式中各运算符的计算顺序,对编写正确的SQL语句至关重要。以下是详细的优先级规则(**从高到低**排列): 1. **最高优先级运算符**: - `!`(逻辑非) - `~`(位反转) - `-`(负号,如`-5`) - 例如:`WHERE !active OR ~flag`[^3][^4] 2. **指数运算符**: - `^`(位异或) - 例如:`SELECT 6 ^ 3; -- 结果为5`[^3] 3. **乘除模运算符**: - `*`(乘)、`/`(除)、`%`(取模) - 例如:`SELECT 10 % 3 * 2; -- 结果为2`[^3] 4. **加减运算符**: - `+`(加)、`-`(减) - 例如:`SELECT 5 - 3 + 1; -- 结果为3`[^3] 5. **位移运算符**: - `<<`(左移)、`>>`(右移) - 例如:`SELECT 4 << 1; -- 结果为8`[^3] 6. **按位与**: - `&`(位与) - 例如:`SELECT 3 & 6; -- 结果为2`[^3] 7. **按位或**: - `|`(位或) - 例如:`SELECT 3 | 6; -- 结果为7`[^3] 8. **比较运算符**: - `=`, `<=>`, `>`, `>=`, `<`, `<=`, `<>`, `!=`, `IS`, `LIKE`, `REGEXP`, `IN` - **同级从左向右计算**:`SELECT 3>2>=1; -- 1 (等价于(3>2)>=1 → 1>=1)` `SELECT 3>2>1; -- 0 (等价于(3>2)>1 → 1>1)`[^1][^3] 9. **特殊范围运算符**: - `BETWEEN`, `CASE`, `WHEN`, `THEN`, `ELSE` - 例如:`WHERE price BETWEEN 10 AND 20`[^3] 10. **逻辑非**: - `NOT` - 例如:`WHERE NOT active`[^3] 11. **逻辑与**: - `&&` 或 `AND` - 例如:`WHERE active AND verified`[^3][^4] 12. **逻辑异或**: - `XOR` - 例如:`WHERE active XOR verified`[^3] 13. **逻辑或**: - `||` 或 `OR` - 例如:`WHERE active OR admin`[^3][^4] 14. **最低优先级**: - `:=`(赋值)、`=`(赋值) - 主要用于变量赋值:`SET @var = 10;`[^3] ### ️ 关键注意事项 1. **同级运算符**:相同优先级的运算符按**从左到右**顺序计算[^1][^3] 2. **圆括号优先**:`()`可强制改变计算顺序 ```sql SELECT (1+2)*3; -- 结果为9(不加括号则为7) ``` 3. **NULL处理**:涉及`NULL`的比较可能返回`NULL`(未知状态)[^4] 4. **特殊比较**: - `<=>` 可比较`NULL`值:`SELECT NULL<=>NULL; -- 1`[^4] - `<>`与`!=`功能相同 > ⚠️ 实际开发建议:**多用圆括号明确优先级**,避免依赖记忆顺序,尤其在组合`AND/OR`时: > ```sql > WHERE (active=1 OR admin=1) AND deleted=0 -- 正确逻辑 > ``` 理解运算符优先级可显著减少逻辑错误,提升SQL语句的清晰度和执行效率[^2]。 --- ####
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值