MySQL运算符

本文详细介绍了MySQL中的各种比较运算符与逻辑运算符,包括特殊的NULL处理方式,如<=>操作符、LEAST和GREATEST函数等,以及常用的逻辑运算符AND、OR和XOR。此外还涉及了位运算符和正则表达式的使用方法。

1.<=>
举例:这个操作符和=操作符执行相同的比较操作,不过<=>可以用来判断NULL值。
在两个操作数均为NULL时,其返回值为1而不为NULL;
而当一个操作数为NULL时,其返回值为0而不为NULL。

2.LEAST
举例:SELECT LEAST(2,0),LEAST('a','b','c'),LEAST(10,NULL)
当参数中是整数或者浮点数时,LEAST将返回其中最小的值;
当参数为字符串时,返回字母中顺序最靠前的字符;
当比较值列表中有NULL时,不能判断大小,返回值为NULL

3.GREATEST
举例:SELECT GREATEST(2,0),GREATEST('a','b','c'),GREATEST(10,NULL)
在有两个或多个参数的情况下,返回最大值。
假如任意一个自变量为NULL,则GREATEST()的返回值为NULL

4.REGEXP
举例:SELECT'ssky' REGEXP'^s','ssky' REGEXP'y$' ,'ssky' REGEXP'.sky','ssky' REGEXP'[ab]';
expr REGEXP 匹配条件,如果expr满足匹配条件,返回1;
如果不满足,则返回0;
若expr或匹配条件任意一个为NULL,则结果为NULL。

5.逻辑运算符
逻辑与运算符:AND或者&&
逻辑或运算符:OR或者||
异或运算符:XOR   
(说明:当任意一个操作数为NULL时,返回值为NULL;对于非NULL的操作数,如果两个操作数都是非0值或者都是0值,则返回结果为0;如果一个为0值,另一个为非0值,返回结果为1)

6.位运算符
按位或(|)
按位与(&)
按位异或(^)
按位左移(<<)
按位右移(>>)
按位取反(~)

7.特殊字符
某一些MYSQL中的特殊字符需要用转义字符才能插入数据库:
输入单引号需要:\'
输入双引号需要:\''
输入反斜杠:\\
输入回车符:\r
输入换行符:\n
输入制表符:\tab
输入退格符:\b

<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]。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值