目录
一、运算符简述
二、运算符使用
1.算术运算符
1.1 加法运算符
1.2 减法运算符
1.3 乘法与除法运算符
1.4 求模(求余)运算符
2.比较运算符
2.1 等号运算符
2.2 安全等于运算符
2.3 不等于运算符
2.4 空运算符
2.5 非空运算符
2.6 最小值运算符
2.7 最大值运算符
2.8 BETWEEN AND运算符
2.9 IN运算符
2.10 NOT IN运算符
2.11 LIKE运算符
2.12 REGEXP运算符
3. 逻辑运算符
3.1 逻辑非运算符
3.2 逻辑与运算符
3.3 逻辑或运算符
3.4逻辑异或运算符
4. 位运算符
4.1 按位与运算符
4.2 按位或运算符
4.3 按位异或运算符
4.4 按位取反运算符
4.5 按位右移运算符
4.6 按位左移运算符
5. 运算符的优先级
运算符连接表达式中各个操作数,其作用是用来指明对操作数所进行的运算。MySQL 支持 4 种运算符,分别是算术运算符、比较运算符、逻辑运算符、位运算符:
算术运算符用于数学运算,它可以连接运算符前后的两个数值或表达式,对数值或表达式进行加、减、乘、除和取模运算。
运算符 | 名称 | 作用 | 例子 |
+ | 加法运算符 | 计算两个值或表达式的和 | 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 |
SELECT 100, 100 + 50, 100 + 35.5 FROM `user`;
注意:两个整数类型值进行加法操作,结果是整数;一个整数类型的值和浮点数进行加法操作,结果是浮点数。
SELECT 100, 100 - 50, 100 - 35.5 FROM `user`;
注意:两个整数类型值进行减法操作,结果是整数;一个整数类型的值和浮点数进行减法操作,结果是浮点数。
SELECT 100 * 1, 100 * 1.0, 100 / 1.0, 100 / 2, 100 DIV 0 FROM `user`;
注意:一个数除以整数后,不管是否能除尽,结果为浮点数;一个数除以另一个数,除不尽时,结果为浮点数,并保留到小数点后4位;在MySQL中,一个数除以0为NULL。
SELECT 10 % 3, 12 MOD 5 FROM `user`;
比较运算符对表达式左边的值和右边的值进行比较,比较的结果为真则返回1,比较的结果为假则返回0,其他情况则返回NULL。
运算符 | 名称 | 作用 | 例子 |
= | 等于运算符 | 判断两个值、字符串或表达式是否相等 | SELECT * FROM TABLE WHERE A=B |
<=> | 安全等于运算符 | 安全地判断两个值、字符串或表达式是否相等 | SELECT * FROM TABLE WHERE A<=>B |
<> 或者 != | 不等于运算符 | 判断两个值、字符串或表达式是否不相等 | SELECT * FROM TABLE WHERE A<>B 或者 SELECT * FROM TABLE WHERE A!=B |
< | 小于运算符 | 判断前面的值、字符串或表达式是否小于后面的值、字符串或表达式 | SELECT * FROM TABLE WHERE A |
<= | 小于等于运算符 | 判断前面的值、字符串或表达式是否小于等于后面的值、字符串或表达式 | SELECT * FROM TABLE WHERE A<=B |
> | 大于运算符 | 判断前面的值、字符串或表达式是否大于后面的值、字符串或表达式 | SELECT * FROM TABLE WHERE A>B |
>= | 大于等于运算符 | 判断前面的值、字符串或表达式是否大于等于后面的值、字符串或表达式 | SELECT * FROM TABLE WHERE A>=B |
SELECT 3 = 3, 2 = '2', 3 = 4, 'a' = 'a', (4 + 6) = (2 + 8), '' = NULL , NULL = NULL;
总结:
SELECT 1 <=> '1', 1 <=> 0, 'a' <=> 'a', (3 + 3) <=> (1 + 2), '' <=> NULL,NULL <=> NULL FROM `user`;
非符号类型的运算符:
运算符 | 名称 | 作用 | 例子 |
IS NULL | 为空运算符 | 判断值、字符串或表达式是否为空 | SELECT * FROM TABLE WHERE A IS NULL |
IS NOT NULL | 不为空运算符 | 判断值、字符串或表达式是否不为空 | SELECT * FROM TABLE WHERE A IS NOT NULL |
LEAST | 最小值运算符 | 在多个值中返回最小值 | SELECT * FROM TABLE WHERE C LEAST(A,B) |
GREATEST | 最大值运算符 | 在多个值中返回最大值 | SELECT * FROM TABLE WHERE C GREATEST(A,B) |
BETWEEN AND | 两个数值之间的运算符 | 判断数值是否在两个值之间 | SELECT * FROM TABLE WHERE C BETWEEN AND(A,B) |
IN | 属于运算符 | 判断数值是否在列表中的任意值 | SELECT * FROM TABLE WHERE C IN (A,B) |
NOT IN | 不属于运算符 | 判断数值是否不是在列表中的任意值 | SELECT * FROM TABLE WHERE C NOT IN (A,B) |
LIKE | 模糊匹配运算符 | 判断数值是否符合模糊匹配规则 | SELECT * FROM TABLE WHERE C LIKE B |
REGEXP | 正则表达式运算符 | 判断数值是否符合正则表达式 | SELECT * FROM TABLE WHERE C REGEXP B |
RLIKE | 正则表达式运算符 | 判断数值是否符合正则表达式 | SELECT * FROM TABLE WHERE C RLIKE B |
空运算符判断一个值是否为NULL,如果为NULL则返回1,否则返回0。
SELECT NULL IS NULL, ISNULL(NULL), ISNULL('a'), 1 IS NULL;
非空运算符判断一个值是否不为NULL,如果不为NULL则返回1,否则返回0。
SELECT NULL IS NOT NULL;
SELECT 'a' IS NOT NULL;
SELECT 1 IS NOT NULL ;
在有两个或多个参数的情况下,返回最小值。
SELECT LEAST (1,0,2), LEAST('b','a','c'), LEAST(1,NULL,2);
当有两个或多个参数时,返回值为最大值。假如任意一个自变量为NULL,则GREATEST()的返回值为NULL。
SELECT GREATEST(1,0,2), GREATEST('b','a','c'), GREATEST(1,NULL,2);
SELECT D FROM TABLE WHERE C BETWEEN A AND B,此时,当C大于或等于A,并且C小于或等于B时,结果为1,否则结果为0。
SELECT 1 BETWEEN 0 AND 1, 10 BETWEEN 11 AND 12, 'b' BETWEEN 'a' AND 'c';
SELECT 'a' IN ('a','b','c'), 1 IN (2,3), NULL IN ('a','b'), 'a' IN ('a', NULL);
NOT IN运算符用于判断给定的值是否不是IN列表中的一个值,如果不是IN列表中的一个值,则返回1,否则返回0。
SELECT 'a' NOT IN ('a','b','c'), 1 NOT IN (2,3);
LIKE运算符主要用来匹配字符串,通常用于模糊匹配,如果满足条件则返回1,否则返回0;
如果给定的值或者匹配条件为NULL,则返回结果为NULL。
LIKE运算符通常使用如下通配符:
SELECT NULL LIKE 'abc', 'abc' LIKE NULL;
ESCAPE:关键字的主要作用就是指定一个字符替代“\”的作用。
REGEXP运算符用来匹配字符串,满足匹配条件返回1;不满足则返回0。
若expr或匹配条件任意一个为NULL,则结果为NULL。
REGEXP运算符常用的通配符:
SELECT 'shkstart' REGEXP '^s', 'shkstart' REGEXP 't$', 'shkstart' REGEXP 'hk';
逻辑运算符用来判断表达式的真假,逻辑运算符的返回结果为1、0或者NULL。
运算符 | 作用 | 例子 |
NOT 或 ! | 逻辑非 | SELECT NOT A |
AND 或&& | 逻辑与 | SELECT A AND B或者 SELECT A && B |
OR 或 || | 逻辑或 | SELECT A OR B或者 SELECT A || B |
XOR | 逻辑异或 | SELECT A XOR B |
SELECT NOT 1, NOT 0, NOT(1+1), NOT !1, NOT NULL;
SELECT 1 AND -1, 0 AND 1, 0 AND NULL, 1 AND NULL;
SELECT 1 OR -1, 1 OR 0, 1 OR NULL, 0 || NULL, NULL || NULL;
SELECT 1 XOR -1, 1 XOR 0, 0 XOR 0, 1 XOR NULL, 1 XOR 1 XOR 1, 0 XOR 0 XOR 0;
运算符 | 作用 | 例子 |
& | 按位与 | SELECT A & B |
| | 按位或 | SELECT A | B |
^ | 按位异或 | SELECT A ^ B |
~ | 按位取反 | SELECT A ~ B |
>> | 按位右移 | SELECT A >> B |
<< | 按位左移 | SELECT A << B |
SELECT 1 & 10, 20 & 30;
SELECT 1 | 10, 20 | 30;
SELECT 1 ^ 10, 20 ^ 30;
按位取反运算符将给定的值的二进制数逐位进行取反操作,即将1变为0,将0变为1。
SELECT 10 & ~1;
SELECT 1 >> 2, 4 >> 2;
1的二进制数为0000 0001,右移2位为0000 0000,对应的十进制数为0。
4的二进制数为0000 0100,右移2位为0000 0001,对应的十进制数为1。
SELECT 1 << 2, 4 << 2;
1的二进制数为0000 0001,左移两位为0000 0100,对应的十进制数为4。
4的二进制数为0000 0100,左移两位为0001 0000,对应的十进制数为16。
优先级 | 运算符 |
1 | : = , = |
2 | || , OR, XOR |
3 | &&, AND |
4 | NOT |
5 | BETWEEN, CASE, WHEN, THEN, ELSE |
6 | =, <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN |
7 | | |
8 | & |
9 | << , >> |
10 | -, + |
11 | * , /, DIV, %, MOD |
12 | ^ |
13 | - , ~ |
14 | ! |
15 | () |
数字编号越大优先级越高,优先级高的运算符先进行计算。
赋值运算符的优先级最低,使用“()”括起来的表达式的优先级最高。