MySQL运算符

1. 算术运算符

用于数学运算,连接两个数值或表达式进行加、减、乘、除、取模操作。

运算符名称作用示例
+加法运算符计算和SELECT A + B
-减法运算符计算差SELECT A - B
*乘法运算符计算乘积SELECT A * B
/ 或 DIV除法运算符计算商SELECT A / B 或 SELECT A DIV B
% 或 MOD求模运算符计算余数SELECT A % B 或 SELECT A MOD B

注意事项:

  • 整数与整数运算结果为整数,整数与浮点数运算结果为浮点数。
  • 加法和减法优先级相同,乘法和除法优先级相同(高于加减)。
  • MySQL 中+仅表示数值相加,非数值类型会尝试转数值(失败则按 0 计算),字符串拼接需用CONCAT()
  • 除法结果为浮点数,除以 0 返回NULL
  • 求模运算可用于筛选奇偶性,如WHERE employee_id MOD 2 = 0筛选偶数 ID。

2. 比较运算符

用于比较两个值或表达式,结果为 1(真)、0(假)或NULL,常作为查询条件。

基础比较运算符

运算符名称作用示例
=等于运算符判断是否相等WHERE A = B
<=>安全等于运算符判断是否相等(支持 NULL)WHERE A <=> B
<> 或 !=不等于运算符判断是否不相等WHERE A <> B 或 WHERE A != B
<小于运算符判断前者是否小于后者WHERE A < B
<=小于等于运算符判断前者是否小于等于后者WHERE A <= B
>大于运算符判断前者是否大于后者WHERE A > B
>=大于等于运算符判断前者是否大于等于后者WHERE A >= B

关键说明:

  • = 与 <=> 的区别:= 对NULL比较返回NULL<=> 对两个NULL比较返回 1,一个NULL返回 0。
  • 字符串与整数比较时,字符串会转为数字。

特殊比较运算符

运算符名称作用示例
IS NULL为空运算符判断是否为 NULLWHERE A IS NULL
IS NOT NULL非空运算符判断是否不为 NULLWHERE A IS NOT NULL
LEAST()最小值运算符返回多个值中的最小值LEAST(1, 0, 2) 返回 0
GREATEST()最大值运算符返回多个值中的最大值GREATEST(1, 0, 2) 返回 2
BETWEEN A AND B两值之间运算符判断值是否在 [A, B] 范围内WHERE C BETWEEN 10 AND 20
IN()属于运算符判断值是否在列表中WHERE C IN (1, 2, 3)
NOT IN()不属于运算符判断值是否不在列表中WHERE C NOT IN (1, 2, 3)
LIKE模糊匹配运算符按通配符匹配字符串WHERE A LIKE 'S%'
REGEXP/RLIKE正则匹配运算符按正则规则匹配字符串WHERE A REGEXP '^s'

关键说明:

  • LEAST()/GREATEST() 中包含NULL时,结果为NULL
  • BETWEEN A AND B 等价于 A <= C <= B,包含边界值。
  • LIKE 通配符:% 匹配 0 个或多个字符,_ 匹配 1 个字符;需转义特殊符号时,用ESCAPE指定转义符(如LIKE 'IT$_%' ESCAPE '$')。
  • REGEXP 常用模式:^ 匹配开头,$ 匹配结尾,. 匹配任意单字符,[...] 匹配集合内字符,* 匹配 0 个或多个前置字符。

3. 逻辑运算符

用于判断表达式真假,返回 1(真)、0(假)或NULL

运算符名称作用示例
NOT 或 !逻辑非取反(0→1,非 0→0,NULL→NULL)WHERE NOT A
AND 或 &&逻辑与全为非 0 且非 NULL 时返回 1,否则 0 或 NULLWHERE A AND B
OR 或 ||逻辑或任一非 0 且非 NULL 时返回 1,否则 0 或 NULLWHERE A OR B
XOR逻辑异或两个非 NULL 值一个为 0 一个非 0 时返回 1,否则 0 或 NULLWHERE A XOR B
MySQL运算符

注意事项:

  • AND 优先级高于 OR,建议用括号明确优先级。
  • 示例:WHERE salary >= 10000 AND job_id LIKE '%MAN%' 筛选高薪且职位含 MAN 的员工。

4. 位运算符

对二进制数进行运算,先转二进制,运算后转回十进制。

运算符名称作用示例
&按位与对应位均为 1 则返回 1,否则 01 & 10 返回 0
|按位或对应位有一个为 1 则返回 1,否则 01|10 返回 11
^按位异或对应位不同则返回 1,相同则 01 ^ 10 返回 11
~按位取反1→0,0→1~1 返回 -2(二进制补码)
>>按位右移二进制位右移指定位数,高位补 04 >> 2 返回 1
<<按位左移二进制位左移指定位数,低位补 04 << 2 返回 16

![[Pasted image 20250725215806.png]]

示例:

  • 20 & 30:20 二进制为10100,30 为11110,按位与得10100(十进制 20)。
  • 20 | 30:按位或得11110(十进制 30)。

5. 运算符优先级

数字越大,优先级越高,建议用()明确运算顺序。

优先级运算符(部分)
15()(括号内表达式)
14!
13~(按位取反)、-(负号)
12^
11*/DIV%MOD
10+-(加减)
9<<>>(位移)
8&
7|
6=(比较运算符), <=>><>=<=!=ISLIKEIN,REGEXP
5BETWEENCASE, WHEN, THEN, ELSE
4NOT
3AND&&
2OR, XOR,||
1=(赋值)

6. 正则表达式拓展(REGEXP

用于复杂字符串匹配,常用模式如下:

模式说明示例
^匹配开头字符'^b' 匹配以b开头的字符串(如book
$匹配结尾字符'st$' 匹配以st结尾的字符串(如test
.匹配任意单字符'b.t' 匹配bitbat
*匹配 0 个或多个前置字符'f*n' 匹配fnfanfaan
+匹配 1 个或多个前置字符'ba+' 匹配babaybattle
[]匹配集合内任意字符'[ot]' 匹配含ot的字符串
[^]匹配集合外任意字符'[^abc]' 匹配不含abc的字符串
{n,}匹配前置字符至少 n 次'x{2,}' 匹配含至少 2 个x的字符串
{n,m}匹配前置字符 n 到 m 次'ba{1,3}' 匹配babaabaaa
  1. 查询以特定字符或字符串开头的记录
    字符‘^’匹配以特定字符或者字符串开头的文本。
    在 fruits 表中,查询 f_name 字段以字母‘b’开头的记录:
    mysql SELECT * FROM fruits WHERE f_name REGEXP '^b';
  2. 查询以特定字符或字符串结尾的记录
    字符‘$’匹配以特定字符或者字符串结尾的文本。
    在 fruits 表中,查询 f_name 字段以字母‘y’结尾的记录:
    mysql SELECT * FROM fruits WHERE f_name REGEXP 'y$';
  3. 用符号 “.” 替代任意单个字符
    字符‘.’匹配任意一个字符。
    在 fruits 表中,查询 f_name 字段值包含字母‘a’与‘g’且两字母间只有一个字符的记录:
    mysql SELECT * FROM fruits WHERE f_name REGEXP 'a.g';
  4. 使用 “*” 和 “+” 匹配多个字符
    • 星号‘*’:匹配前面的字符任意多次(包括 0 次)。
    • 加号‘+’:匹配前面的字符至少一次。
    • 在 fruits 表中,查询 f_name 字段以‘b’开头且后面出现‘a’(0 次或多次)的记录:
    SELECT * FROM fruits WHERE f_name REGEXP '^ba*';
- 在 fruits 表中,查询 f_name 字段以‘b’开头且后面出现‘a’(至少 1 次)的记录:
    SELECT * FROM fruits WHERE f_name REGEXP '^ba+';
  1. 匹配指定字符串(单个或多个)
    匹配文本中包含指定字符串,多个字符串用‘|’分隔。
    • 在 fruits 表中,查询 f_name 字段包含 “on” 的记录:
    SELECT * FROM fruits WHERE f_name REGEXP 'on';
- 在 fruits 表中,查询 f_name 字段包含 “on” 或 “ap” 的记录:
    SELECT * FROM fruits WHERE f_name REGEXP 'on|ap';
  1. 匹配指定字符集合中的任意一个
    方括号 “[]” 指定字符集合,匹配其中任意一个字符。
    • 在 fruits 表中,查询 f_name 字段包含‘o’或‘t’的记录:
    SELECT * FROM fruits WHERE f_name REGEXP '[ot]';
- 在 fruits 表中,查询 s_id 字段包含 4、5 或 6 的记录:
    SELECT * FROM fruits WHERE s_id REGEXP '[456]';
  1. 匹配指定字符集合以外的字符
    “[字符集合]” 匹配不在集合中的任意字符。
    在 fruits 表中,查询 f_id 字段包含字母 a~e 和数字 1~2 以外字符的记录:
    mysql SELECT * FROM fruits WHERE f_id REGEXP '[^a-e1-2]';
  2. 指定字符串连续出现的次数
    • “字符串 {n,}”:匹配前面的字符串至少 n 次。
    • “字符串 {n,m}”:匹配前面的字符串不少于 n 次、不多于 m 次。
    • 在 fruits 表中,查询 f_name 字段出现字母‘x’至少 2 次的记录:
    SELECT * FROM fruits WHERE f_name REGEXP 'x{2,}';
  • 在 fruits 表中,查询 f_name 字段出现 “ba” 最少 1 次、最多 3 次的记录:
    SELECT * FROM fruits WHERE f_name REGEXP 'ba{1,3}'; 
SELECT使用

基本的SELECT语法

2025-7-25 20:59:35

Java基础

Arrays工具类的使用

2025-8-8 10:26:55

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索