05 MySql8的运算符

运算符

一.分类

  1. 算数运算符
  2. 比较运算符
  3. 逻辑运算符
  4. 位运算符

二.算数运算符

案例一:加减

select 1,1+0,1-0,1+1-1,1-1+1,2-1.5,2+1.5

总结:
 一个整数类型的值对整数进行加法和减法操作,结果还是一个整数;
 一个整数类型的值对浮点数进行加法和减法操作,结果是一个浮点数;
 加法和减法的优先级相同,进行先加后减操作与进行先减后加操作的结果是一样的;
 是在MySQL中+只表示数 值相加。如果遇到非数值类型,先尝试转成数值,如果转失败,就按0计算。
 MySQL 中字符串拼接要使用字符串函数CONCAT()实现

案例二:乘除

select 1,11,11.0,1/1.0,1 DIV 1.0,1+1/1,1+1*2,1/0

总结:
 一个数乘以整数1和除以整数1后仍得原数;
 一个数乘以浮点数1和除以浮点数1后变成浮点数,数值与原数相等;
 一个数除以整数后,不管是否能除尽,结果都为一个浮点数;
 一个数除以另一个数,除不尽时,结果为一个浮点数,并保留到小数点后4位;
 乘法和除法的优先级相同,进行先乘后除操作与先除后乘操作,得出的结果相同。
 在数学运算中,0不能用作除数,在MySQL中,一个数除以0为NULL。
案例三:求余数(求模)
select 12%3,12 MOD 3,12%5, 12 MOD 5

三.比较运算符

1.比较运算符的结果有三种

  1. 比较的结果为真则返回1
  2. 比较的结果为假则返回0
  3. 其他情况则返回NULL。

2.分类

符号类型的运算符

案例一:等于和安全等于运算符
select1=1,1=‘1’,1=‘a’,1=0,‘aa’=‘aa’,(1+1)=(3-1),‘’=NULL,NULL=NULL,NULL<=>NULL,0<=>NULL

等号运算符总结:
(1) 等号运算符(=)判断等号两边的值、字符串或表达式是否相等,如果相等则返回1,不相等则返回 0。
(2) 在使用等号运算符时,遵循如下规则:
a) 如果等号两边的值、字符串或表达式都为字符串,则MySQL会按照字符串进行比较,其比较的 是每个字符串中字符的ANSI编码是否相等。
b) 如果等号两边的值都是整数,则MySQL会按照整数来比较两个值的大小。
c) 如果等号两边的值一个是整数,另一个是字符串,则MySQL会将字符串转化为数字进行比较。
d) 如果等号两边的值、字符串或表达式中有一个为NULL,则比较结果为NULL。

安全等于运算符总结
(1) 安全等于运算符(<=>)与等于运算符(=)的作用是相似的, 唯一的区别 是‘<=>’可 以用来对NULL进行判断。
(2) 在两个操作数均为NULL时,其返回值为1, 而不为NULL
(3) 当一个操作数为NULL 时,其返回值为0,而不为NULL。
案例二:不等于运算符
select1<>1,1!=1,1!=5,‘a’<>‘a’,(1+1)<>(2+2),‘a’!=NULL,NULL!=NULL,NULL<>NULL

总结:
 不等于运算符(<>和!=)用于判断两边的数字、字符串或者表达式的值是否不相等
 如果不相等则返回1,相等则返回0
 不等于运算符不能判断NULL值。
 如果两边的值有任意一个为NULL, 或两边都为NULL,则结果为NULL。

非符号类型的运算符

案例一:is null和is not null 和isnull

select NULL is NULL,ISNULL(NULL),1 is not NULL,null is not NULL

查询学生姓名为null的学生信息
select * FROM student where stu_name is NULL
select * FROM student where stu_name<=>NULL
select * FROM student where ISNULL(stu_name)

案例二:最小值和最大值

最小值:
select LEAST(10,20) , LEAST(‘abc’,‘acb’),LEAST(1,NULL,2.5)

总结:
 当参数是整数或者浮点数时,LEAST将返回其中最小的值
 当参数为字符串时,返回字 母表中顺序最靠前的字符
 当比较值列表中有NULL时,不能判断大小,返回值为NULL

最大值:
select GREATEST(10,20) , GREATEST(‘abc’,‘acb’),GREATEST(1,NULL,2.5)

总结:
 当参数中是整数或者浮点数时,GREATEST将返回其中最大的值
 当参数为字符串时, 返回字母表中顺序最靠后的字符
 当比较值列表中有NULL时,不能判断大小,返回值为NULL

案例三:between…and…

select * from student
where stu_age BETWEEN 20 and 50

案例四:in和not in

select ‘a’ IN(1,2,3),NULL IN(1,2,3),1 IN(NULL,1),‘a’ not IN(1,2,3)

总结:
 IN运算符用于判断给定的值是否是IN列表中的一个值,如果是则返回1,否则返回0
 如果给 定的值为NULL,则结果为NULL
 NOT IN运算符用于判断给定的值是否不是IN列表中的一个值,如果不是IN列表中的一 个值,则返回1,否则返回0

案例五:like运算符

 like是模糊查询,主要用来匹配字符串,如果满足条件返回1,不满足条件返回0
 通配符
“%”:匹配0个或多个字符。
”:只能匹配一个字符。
查询姓张的学生信息
select * from student where stu_name like ‘张%’
查询姓张的名为一个字的学生信息
select * from student where stu_name like ‘张

查询名字中有李字的学生信息
select * from student where stu_name like ‘%张%’
查询名字中三结尾的学生信息
select * from student where stu_name like ‘%三’

案例六:escape运算符

 MySQL中,转义字符以“\”开头,编程中常见的转义字符,在MySQL均是有效的,在此不做赘述和讨论。在此,主要通过“%” 和 “”来对ESCAPE关键字的作用进行说明。
%:匹配任意多个字符。
_
:匹配单一字符。
如果我们要匹配“%”或者“_”时,就必须使用“\”进行转义,如下:
查询名字中带明字的用户

SELECT * FROM user WHERE name LIKE CONCAT(“%”, “明”, “%”)
查询名字带有%字符的用户
SELECT * FROM user WHERE name LIKE CONCAT(“%”, “%”, “%”)
ESCAPE的用法
ESCAPE 关键字的主要作用就是指定一个字符替代“\”的作用。
查询名字带有“%”字符的用户
SELECT * FROM user WHERE name LIKE CONCAT(“%”, “ %", "%") ESCAPE "
查询名字带有“”字符的用户
SELECT * FROM user WHERE name LIKE CONCAT(“%”, "a
", “%”) ESCAPE “a”
需要注意的查询条件中所有通过ESCAPE指代的字符均会替代“\”的作用。
假设存在名字为 %a 和 %_ 两个的用户
SELECT * FROM user WHERE name LIKE "a%" ESCAPE “a” ### %a %
SELECT * FROM user WHERE name LIKE “a%a” ESCAPE “a” ### %a
SELECT * FROM user WHERE name LIKE “a%a_” ESCAPE “a” ### %
案例七:REGEXP运算符
作用:REGEXP运算符用来匹配字符串
语法格式为: expr REGEXP 匹配条件
匹配结果:
如果expr满足匹配条件,返回 1;如果不满足,则返回0
若expr或匹配条件任意一个为NULL,则结果为NULL。
常用的通配符:
(1)‘^’匹配以该字符后面的字符开头的字符串。
(2)‘KaTeX parse error: Double superscript at position 242: …ave' REGEXP '^s'̲,'save' REGEXP …’,‘save’ REGEXP ‘[0-9]’,‘123’ REGEXP ‘[0-9]*’

四.逻辑运算符

1.作用

主要用来判断表达式的真假

2.判断结果

 1
 0
 null

3.逻辑运算符

逻辑异或说明:
 逻辑异或(XOR)运算符是当给定的值中任意一个值为NULL时,则返回NULL
 如果 两个非NULL的值都是0或者都不等于0时,则返回0
 如果一个值为0,另一个值不为0时,则返回1

案例一:

select NOT 1,NOT NULL,NOT 0,NOT 100,NOT ‘张三’

案例二:

select * from student where stu_age BETWEEN 30 and 90

案例三:

select * from student where stu_age=30 or stu_age=90

案例四:

select 1 XOR -1,1 XOR 1,0 XOR 1,NULL XOR 1,NULL XOR NULL

五.位运算符

1.作用

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

2.位运算符

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

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

按位异或运算符
 按位异或(^)运算符将给定的值对应的二进制数逐位进行逻辑异或运算。当给定值 对应的二进制位的数值不同时,则该位返回1,否则返回0。

按位取反运算符
 按位取反(~)运算符将给定的值的二进制数逐位进行取反操作,即将1变为0,将0变 为1。

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

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

案例一:

select 1 & 10,20 & 30

1的二进制数为0001,10的二进制数为1010,所以1 & 10的结果为0000,对应的十进制数为0。20的二进制 数为10100,30的二进制数为11110,所以20 & 30的结果为10100,对应的十进制数为20。

案例二:

select 1 | 10,20 | 30

1的二进制数为0001,10的二进制数为1010,所以1 | 10的结果为1011,对应的十进制数为11。20的二进 制数为10100,30的二进制数为11110,所以20 | 30的结果为11110,对应的十进制数为30。

案例三:

select 1 ^ 10,20 ^ 30

1的二进制数为0001,10的二进制数为1010,所以1 ^ 10的结果为1011,对应的十进制数为11。20的二进 制数为10100,30的二进制数为11110,所以20 ^ 30的结果为01010,对应的十进制数为10。

案例四:

SELECT 12 & 5, 12 | 5,12 ^ 5

案例五:

select 10 & ~1

由于按位取反(~)运算符的优先级高于按位与(&)运算符的优先级,所以10 & ~1,首先,对数字1进 行按位取反操作,结果除了最低位为0,其他位都为1,然后与10进行按位与操作,结果为10。

案例六:

select 1>>2,4>>2,1<<2,4<<2

 1的二进制数为0000 0001,右移2位为0000 0000,对应的十进制数为0。4的二进制数为0000 0100,右移2 位为0000 0001,对应的十进制数为1。
 1的二进制数为0000 0001,左移两位为0000 0100,对应的十进制数为4。4的二进制数为0000 0100,左移 两位为0001 0000,对应的十进制数为16。

六.运算符的优先级

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值