4大类运算符

200 阅读12分钟

算术运算符

算术运算符主要用于数学运算,其可以连接运算符前后的两个数值或表达式,对数值或表达式进行加,减,乘,除和取模运算

运算符名称作用示例
+加法运算符计算两个值或表达式的和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

1.加法与减法运算符

select 100+10,100-10,100-0,100+0,100+50-30,100+2.5,100-2.5 from writing_task;

1.png 由运算结果可以得出如下结论:

  • 一个整数类型的值对整数进行加法和减法操作,结果还是一个整数;
  • 一个整数类型的值对浮点数进行加减法操作,结果是一个浮点数;
  • 加法和减法的优先级相同,进行先加后减操作与进行先减后加操作的结果是一样的;
  • 在java中,+的左右两边如果有字符串,那么表示字符串的拼接,但是在mysql中+只表示数值相加,如果遇到非数值类型,先尝试转换为数值,如果转失败就按照0计算(补充:mysql中字符串拼接要使用字符串函数CONCAT()实现);

2.乘法与除法运算符

select 100*1,100*1.000001,100/1.0,100/1,100+2*5/2,100/3,100 div 0 ,0 div 100 from writing_task;

微信截图_20221229144024.png 由运算结果可以得出如下结论:

  • 一个数乘以整数1或除以整数1后仍是得原数;
  • 一个数乘以浮点数1或除以浮点数1后变成浮点数,数值与原数相等;
  • 一个数除以整数,不管是否能除尽,结果都是一个浮点数;
  • 一个整数除以另一个数,除不尽时,结果为一个浮点数,并保留到小数点后4位;
  • 乘法和除法的优先级相同,进行先乘后除或者先除后乘操作,得出的结果是相同的;
  • 在数学运算中,0不能做除数,在mysql中,一个数除以0为null;

3.求模(求余)运算符

#可以看到,100对5求模后的结果为0,对3求模后的结果为1
select 100 % 5,100 mod 3 from writing_task;
#筛选出task_id为偶数的数据
select * from writing_task where task_id mod 2 = 0;

微信截图_20221229152312.png

微信截图_20221229152327.png

比较运算符

比较运算符用来对表达式左边的操作数和右边的操作数进行比较的,比较的结果为真则返回1,比较的结果为假则返回0,其他情况则返回null.
比较运算符经常被用作为select查询语句的条件来使用,返回符合条件的结果记录.

运算符名称作用示例
=等于运算符判断两个值,字符串或表达式是否相等select * from a where b = c
<=>安全等于运算符安全的判断两个值,字符串或者表达式是否相等select * from a where b <=> c
<>(!=)不等于运算符判断两个值,字符串或者表达式是否不相等select * from a where b <> c 或 select * from a where b != c
<小于运算符判断前面的值,字符串或表达式是否小于后面的值,字符串或表达式select * from a where b < c
<=小于等于运算符判断前面的值,字符串或表达式是否小于等于后面的值,字符串或表达式select * from a where b <= c
>(大于符号)小于运算符判断前面的值,字符串或表达式是否大于后面的值,字符串或表达式select * from a where b > c
>=大于等于运算符判断前面的值,字符串或表达式是否大于等于后面的值,字符串或表达式select * from a where b >= c

1.等于运算符

  • 等于运算符判断等号两边的值,字符串或者表达式是否相等,如果相等则返回1,不相等则返回0;
  • 在使用等号运算符时,遵循如下规则:
    • 如果等号两边都为字符串时,则mysql会按照字符串进行比较,其比较的是每个字符串中字符的ANSI编码是否相等
    • 如果等号两边都是整数,则mysql会按照整数比较两个值的大小
    • 如果等号两边一个是整数,一个是字符串,则mysql会先将字符串转换为数字进行比较
    • 如果等号两边有一个为null,则比较结果为null
select 1=1,1='1',1=2,'1'='1',(5+6)=(3+8.0),''=null,null=null from writing_task;

微信截图_20221229160231.png

2.安全等于运算符

使用安全等于运算符时,两边的操作数值都为null时,返回结果为1而不是null,其中一边为null时,返回结果是0而不是null,其他返回结果与等于运算符相同

select 1<=>1,1<=>'1',1<=>2,'1'<=>'1',(5+6)<=>(3+8.0),''<=>null,null<=>null from writing_task;

微信截图_20221229160528.png

3.不等于运算符

不等于运算符,用于判断两边的数值,字符串或表达式的值是否不相等,如果不相等则返回1想等则返回0.不等于运算符不能判断null值,如果两边的值有任意一个为null,或两个都为null,则结果为null.

select 1 <> 1,1 != '1',1 <> 2,'1' <> '1',(5+6) <=> (9+8.0),'' <> null,null <> null from writing_task;

微信截图_20221229162131.png

4.非符号运算符

运算符名称作用示例
is not null不为空运算符判断值,字符串或表达式是否不为空select a from b where c is not null
least最小值运算符在多个值中返回最小值select least(a,b) from c
greatest最大值运算符在多个值中返回最大值select greatest(a,b) from c
between and两值之间的运算符判断一个值是否在两个值之间select * from a where b between c and d
is null为空运算符判断一个值,字符串或表达式是否为空select * from a where b is null
in属于运算符判断一个值是否为列表中任意一个值select * from a where b in (c,d,e,f)
not in不属于运算符判断一个值是否不是列表中任意一个值select * from a where b not in (c,d,e,f)
like模糊匹配运算符判断一个值是否符合模糊匹配规则select * from a where b like c
regexp正则表达式运算符判断一个值是否符合正则表达式的规则select * from a where b regexp c
rlike正则表达式运算符判断一个值是否符合正则表达式的规则select * from a where b rlike c
#非空运算符(IS NOT NULL)判断一个值是否不为NULL,如果不为NULL则返回1,否则返回0
SELECT NULL is NOT NULL,1 IS NOT NULL;
#最小值运算符,LEAD(value1,value2,...valuen)valuen表示参数列表中有n个值,在有两个或者多个参数的时候返回最小值
#当参数为整数或浮点数时,LEAST将返回最小值;当参数为字符串时,返回字母表中顺序最靠前的字符;当比较值列表中有null时,不能判断大小,返回值为null
SELECT LEAST(0,1,2),LEAST('a','b','c'),LEAST('a','b',NULL);
SELECT * FROM writing_task WHERE task_id = LEAST(1607658515927797760,1607662981678764032,1607663217037938688);
#最大值运算符,GREATEST(value1,value2,...valuen)valuen表示参数列表中有n个值,在有两个或者多个参数的时候返回最大值
#当参数为整数或浮点数时,LEAST将返回最大值;当参数为字符串时,返回字母表中顺序最靠后的字符;当比较值列表中有null时,不能判断大小,返回值为null
SELECT GREATEST(0,1,2),GREATEST('a','b','c'),GREATEST('a','b',NULL);
SELECT * FROM writing_task WHERE task_id = GREATEST(1607658515927797760,1607662981678764032,1607663217037938688);
#BETWEEN AND运算符
SELECT 1 BETWEEN 0 AND 1,3 BETWEEN 5 AND 6;
SELECT * FROM writing_task WHERE task_id BETWEEN 1607658515927797760 AND 1607663217037938688;
#空运算符(is null 或 isnull)判断一个值是否为null,如果为null返回1,否则返回0
SELECT NULL IS NULL,ISNULL(NULL),1 IS NULL,ISNULL(1);
SELECT * FROM writing_task WHERE material IS NULL;
SELECT * FROM writing_task WHERE material <=> NULL;
#IN运算符,用于判断给定的值是否是IN列表中的一个值,如果是则返回1,否则返回0,如果给定的值为null,则结果为null
SELECT 1 IN (0,1,2),10 IN (12,13,14),NULL IN (12,13,14),NULL IN (12,13,NULL),12 IN (NULL,12,52);
#NOT IN 运算符,用于判断给定的值是否不是IN列表中的一个值,如果不是IN列表中的一个值则返回1,否则返回0,如果给定的值为null,则结果为null
SELECT 1 NOT IN (0,1,2),10 NOT IN (12,13,14),NULL NOT IN (NULL,13,14),12 NOT IN (NULL,12,52);
#LIKE运算符,LIKE运算符主要用于来匹配字符串,通常用于模糊匹配,如果满足条件则返回1,否则返回0,如果给定的值或者匹配条件为null,则返回结果为null
#LIKE运算符通配符("%"匹配0个或者多个字符,"_"只能匹配一个字符)
SELECT NULL like 'abc','abc' like NULL;
SELECT * FROM writing_task WHERE `name` LIKE '吴%';
SELECT * FROM writing_task WHERE `name` LIKE '_亦%';
#REGEXP运算符,用来匹配字符串,expr REGEXP 匹配条件,如果expr满足匹配条件,返回1
#'^'匹配以该字符后面的字符开头的字符串
SELECT '吴亦凡' REGEXP '^吴';
#'$'匹配以该字符前面的字符结尾的字符串
SELECT '吴亦凡' REGEXP '凡$';
#'[...]'匹配在中括号内的任何字符串,例如'[abc]'匹配a或b或c,为了命名字符的范围,使用一个'-',[a-z]匹配任何字母,而'[0-9]'匹配任何数字
SELECT '吴亦凡' REGEXP '[吴亦凡]';
SELECT 'abc' REGEXP '[a-z]';
SELECT '123' REGEXP '[0-9]';
#'.'匹配任何一个单个字符
SELECT '吴亦凡' REGEXP '[吴.凡]';
SELECT 'abc' REGEXP '[a-z]';
#'*'匹配0个或多个在它前面的字符,例如:'x*'匹配任何数量的'x'字符,'[0-9]*'匹配任何数量的数字,而'*'匹配任何数量的任何字符
SELECT 'bb' REGEXP 'x*';
SELECT 'a' REGEXP '[0-9]*';

逻辑运算符

逻辑运算符主要用来判断表达式的真假,在mysql中,逻辑运算符返回的结果为0,1或者null
mysql中支持4种逻辑运算符如下:

运算符名称示例
not 或 !逻辑非select not a
and 或 &&逻辑与select a and b
or 或\\逻辑或select a or b
xor逻辑异或select a xor b

1.逻辑非运算符

逻辑非运算符表示当给定的值为0时返回1,当给定的值为非0值时返回0,当给定的值为null时返回null

SELECT NOT 1,NOT 0,NOT (1+1),NOT NULL;

微信截图_20221230101336.png

2.逻辑与运算符

逻辑与运算符是当给定的所有值均为非0值,并且都不为null时,返回1;当给定的一个值或多个值为0时则返回0;否则返回null

SELECT 1 AND -1,0 && 1,0 AND NULL,1 AND NULL;

微信截图_20221230102215.png

3.逻辑或运算符

逻辑或运算符是当给定的值都不为null时,并且有任何一个值为非0值时,则返回1,否则返回0;当一个值为null,并且另外一个值为非0值时,返回1否则返回null;两个值都为null时返回null

SELECT 1 OR -1,0 || 1,0 OR 0,0 OR NULL,1 OR NULL,NULL || NULL;

微信截图_20221230102905.png

4.逻辑异或运算符

逻辑异或运算符,当给定的值中任何一个值为null时返回null;如果两个非null值,两个都是0或者都不等于0时返回0如果一个值为0,另外一个值不为0,则返回1.

SELECT 1 XOR -1,0 XOR 1,0 XOR 0,0 XOR NULL;

微信截图_20221230103726.png

位运算符

位运算符是在二进制上进行计算的运算符,位运算符会先将操作数变成二进制数,然后进行位运算,最后将计算结果从二进制数变回十进制数

运算符作用示例
&按位与select a & b
\按位或select a and b
'^'按位异或select a ^ b
~按位取反select a ~ b
>>按位右移select a >> b
<<按位左移select a << b

1.按位与运算符

按位与运算符,将给定的值对应的二进制数逐位进行逻辑与运算,当给定的值对应的二进制位的数值为1时,则该位返回1,否则返回0

SELECT 1 & 10,20 & 30;

2.按位或运算符

按位或运算符,将给定的值对应的二进制数逐位进行逻辑或运算,当给定的值对应的二进制位的数值有一个或两个为1时,则该位返回1,否则返回0

SELECT 1 | 2,20 | 30;

3.按位取反运算符

按位取反运算符,将给定的值的二进制数逐位进行取反操作,即将1变成0,0变成1

SELECT 10 & ~1 ;

4.按位右移运算符(按位左移运算符)

按位右(左)移运算符,将给定的值的二进制数的所有位右(左)移指定的数,右(左)移指定的数后,右(左)边低位的数值被移出并丢弃,左(右)边高位空出的位置用0补齐.

SELECT 10 >> 2,50 >> 4;
SELECT 10 << 2,50 << 4;

运算符的优先级

优先级运算符
1:=,=(赋值)
2\\ ,or,xor
3&&,and
4not
5between,case,when,then,else
6=(比较运算符),<=>,>=,<=,>,<>,!=,is,like,regexp,in
7\
8&
9<<与>>
10-和+
11*,/和div,%和mod
12'^'
13-(负号)和~(取反)
14!
15()

数字编号越大,优先级越高,优先级高的先进行计算