算术运算符
算术运算符主要用于数学运算,其可以连接运算符前后的两个数值或表达式,对数值或表达式进行加,减,乘,除和取模运算
| 运算符 | 名称 | 作用 | 示例 |
|---|---|---|---|
| + | 加法运算符 | 计算两个值或表达式的和 | 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;
由运算结果可以得出如下结论:
- 一个整数类型的值对整数进行加法和减法操作,结果还是一个整数;
- 一个整数类型的值对浮点数进行加减法操作,结果是一个浮点数;
- 加法和减法的优先级相同,进行先加后减操作与进行先减后加操作的结果是一样的;
- 在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;
由运算结果可以得出如下结论:
- 一个数乘以整数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;
比较运算符
比较运算符用来对表达式左边的操作数和右边的操作数进行比较的,比较的结果为真则返回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;
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;
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;
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;
2.逻辑与运算符
逻辑与运算符是当给定的所有值均为非0值,并且都不为null时,返回1;当给定的一个值或多个值为0时则返回0;否则返回null
SELECT 1 AND -1,0 && 1,0 AND NULL,1 AND NULL;
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;
4.逻辑异或运算符
逻辑异或运算符,当给定的值中任何一个值为null时返回null;如果两个非null值,两个都是0或者都不等于0时返回0如果一个值为0,另外一个值不为0,则返回1.
SELECT 1 XOR -1,0 XOR 1,0 XOR 0,0 XOR NULL;
位运算符
位运算符是在二进制上进行计算的运算符,位运算符会先将操作数变成二进制数,然后进行位运算,最后将计算结果从二进制数变回十进制数
| 运算符 | 作用 | 示例 |
|---|---|---|
| & | 按位与 | 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 |
| 4 | not |
| 5 | between,case,when,then,else |
| 6 | =(比较运算符),<=>,>=,<=,>,<>,!=,is,like,regexp,in |
| 7 | \ |
| 8 | & |
| 9 | <<与>> |
| 10 | -和+ |
| 11 | *,/和div,%和mod |
| 12 | '^' |
| 13 | -(负号)和~(取反) |
| 14 | ! |
| 15 | () |
数字编号越大,优先级越高,优先级高的先进行计算