sqlMySQL的运算符主要包括算术运算符、逻辑运算符、比价运算符和位运算符
算术运算符
MySQL支持的算术运算符包括加、减、乘、除、模运算
运算符 | 作用 |
---|---|
+ | 加 |
- | 减 |
* | 乘 |
/,DIV | 除 |
%,MOD | 模运算 |
+ 返回一个或多个值的和
- 返回一个值减去另一个值
* 返回一个或多个值的乘积
/ 一个值除以另一个值的商
% 一个值除以另一个值的余数
除法和模运算如果除数为零,属于非法运算,返回值为NULL
select 10/0,100%0;
比较运算符
比价运算符用来比较左右两边的值,比较结果为真,返回1,为假返回0,比较结果不确定放回NULL
运算符 | 作用 |
---|---|
= | 等于 |
!= 或<> | 不等于 |
<=> | NULL安全的等于 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
BETWEEN | 存在于指定范围 |
IN | 存在于指定集合 |
IS NULL | 查询结果集是否为NULL |
IS NOT NULL | 查询结果集是否部位NULL |
LIKE | 通配符匹配 |
REGEXP或RLIKE | 正则表达式匹配 |
比较运算符可以用于比较数字、字符串和表达式。数字作为浮点数比较,字符串以不区分大小写的方式比较。
=
运算符用于比较两边的操作数是否相等,相等则返回1,否则返回0,NULL用于=
比较
select 1=1,1=0,NULL=NULL;
<>
或!=
运算符,和=
相反,两边的操作数不同返回1,相等返回0,NULL不等用<>
比较
select 1<>1,1<>0,NULL<>NULL;
<=>
NULL安全的 运算符,和=
类似,两边的操作数相等时返回1,两边的操作数不相等时返回0,与=
不同的是,即使两边的操作数都为NULL也可以正确比较。
select 1<=>1,1<=>0,NULL<=>NULL;
<
运算符,当左侧的操作数小于右侧的操作数时,返回1,否则返回0
select 0<1,1<1,1<0;
<=
运算符,当左侧的操作符小于等于右侧的操作符时返回1,否则返回0
select 1<=1,1<=0,1<=0,'a'<='b';
>
运算符,当左侧操作数大于右侧操作数时,返回1,否则返回0
select 1>1,1>0,'a'>'b','c'>'b';
>=
操作符,当左侧操作符大于等于右侧操作符时,返回1,否则返回0
select 1>=1,1>=0,0>=1,'c'>='b';
BETWEEN
操作符的格式为a BETWEEN min AND max
,如果a大于等于min并且小于等于max
,则返回1,否则返回0,当a、min、max类型相同时,等价于a >= min AND a <=max
,当类型不同时,hi遵循类型转换原则,先做类型转换,在进行比较。
select 10 BETWEEN 10 AND 20,9 BETWEEN 10 AND 20;
IN
运算符的格式为a in (value1,values2,...,valuen)
,如果a存在于列表中则返回1,否则返回0
select 1 in (1,2,3), 't' in ('t','a',1,'b'),0 in (1,2);
IS NULL
的使用格式为a IS NULL
,如果a的值为NULL,返回1,否则返回0
select 1 IS NULL,NULL iS NULL;
IS NOT NULL
的使用格式为a IS NOT NULL
,和IS NULL
相反,如果a的值不为NULL则返回1,否则返回0
select 1 IS NOT NULL,NULL IS NOT NULL;
LIKE
运算符的使用格式为a LIKE %123%
,如果a中包含123,返回1,否则返回0
select 123456 LIKE '%123%',123456 LIKE '123%',123456 LIKE '%321%';
REGEXP
运算符的使用格式为str REGEXP str_pat
当str中含有与str_pat相匹配的字符串时,返回1,否则返回0
select 'abcdef' REGEXP 'ab','abgfty' REGEXP 'k';
逻辑运算符
逻辑运算符又称布尔运算符,用来判断表达式的真假,MySQL支持4种逻辑运算符
运算符 | 作用 |
---|---|
NOT或!· | 逻辑非 |
AND或&& | 逻辑与 |
OR 或 || | 逻辑或 |
XOR | 逻辑异或 |
NOT
或!
表示逻辑非。返回结果和操作数相反,如果操作数为假则返回1,如果操作数为真则返回0,NOT NULL的返回值为NULL
select NOT 0,NOT 1,NOT NULL;
AND
或&&
表示逻辑与,当操作数中不存在非0或非NULL的值时,返回1,当一个或多个操作数为0时,返回0,当操作数中有NULL时返回NULL。
select 1 && 2 && 4,1 && 0 && 2,1 && NULL && 2;
OR
或||
表示逻辑或,当两个操作数均为非 NULL 值时,如有任意一个操作数为非零值,则结果为 1,否则结果为 0。当有一个操作数为 NULL时,如另一个操作数为非零值,则结果为 1,否则结果为 NULL。假如两个操作数均为 NULL,则所得结果为 NULL
select 1 || 0 || NULL,0 || 0 || 0, NULL || 0 || NULL,NULL || NULL || NULL;
XOR
表示逻辑异或,当任意一个操作数为NULL时,返回NULL,当两个操作数都不为NULL时,如果两个操作数真假相异返回1,否则返回0
select NULL XOR 1,NULL XOR 0,1 XOR 0,1 XOR 1,0 XOR 0;
位运算符
位运算是将给定的操作数转化为二进制后,对各个操作数每一位都进行指定的逻辑运算,得到的二进制结果转换为十进制数后就是位运算的结果
运算符 | 作用 |
---|---|
& | 位与(AND) |
| | 位或(OR) |
^ | 位异或(XOR) |
~ | 位取反 |
>> | 位右移 |
<< | 位左移 |
MySQL运算符优先级
优先级 | 运算符 |
---|---|
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 | ! |