🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,
15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。
技术合作请加本人wx(注明来自csdn):foreast_sea


MySQL 入门大全:运算符
MySQL 中有多种运算符,下面对 MySQL 运算符进行分类
- 算术运算符
- 比较运算符
- 逻辑运算符
- 位运算符
下面那我们对各个运算符进行介绍
算术运算符
MySQL 支持的算术运算符包括加、减、乘、除和取余,这类运算符的使用频率比较高
下面是运算符的分类
| 运算符 | 作用 | 
|---|---|
| + | 加法 | 
| - | 减法 | 
| * | 乘法 | 
| /, DIV | 除法,返回商 | 
| %, MOD | 除法,返回余数 | 
下面简单描述了这些运算符的使用方法

- +用于获得一个或多个值的和
- -用于从一个值减去另一个值
- *用于两数相乘,得到两个或多个值的乘积
- /用一个值除以另一个值得到商
- %用于一个值除以另一个值得到余数
在除法和取余需要注意一点,如果除数是 0 ,将是非法除数,返回结果为 NULL。
比较运算符
熟悉了运算符,下面来聊一聊比较运算符,使用 SELECT 语句进行查询时,MySQL 允许用户对表达式的两侧的操作数进行比较,比较结果为真,返回 1, 比较结果为假,返回 0 ,比较结果不确定返回 NULL。下面是所有的比较运算符
| 运算符 | 描述 | 
|---|---|
| = | 等于 | 
| <> 或者是 != | 不等于 | 
| <=> | NULL 安全的等于,也就是 NULL-safe | 
| < | 小于 | 
| <= | 小于等于 | 
| > | 大于 | 
| >= | 大于等于 | 
| BETWEEN | 在指定范围内 | 
| IS NULL | 是否为 NULL | 
| IS NOT NULL | 是否为 NULL | 
| IN | 存在于指定集合 | 
| LIKE | 通配符匹配 | 
| REGEXP 或 RLIKE | 正则表达式匹配 | 
比较运算符可以用来比较数字、字符串或者表达式。数字作为浮点数进行比较,字符串以不区分大小写的方式进行比较。
- = 号运算符,用于比较运算符两侧的操作数是否相等,如果相等则返回 1, 如果不相等则返回 0 ,下面是具体的示例,NULL 不能用于比较,会直接返回 NULL

- <>号用于表示不等于,和- =号相反,示例如下

- <=>NULL-safe 的等于运算符,与 = 号最大的区别在于可以比较 NULL 值

- <号运算符,当左侧操作数小于右侧操作数时,返回值为 1, 否则其返回值为 0。

- 和上面同理,只不过是满足 <= 的时候返回 1 ,否则 > 返回 0。这里我有个疑问,为什么
select 'a' <= 'b';  /* 返回 1 */
/*而*/
select 'a' >= 'b'; /* 返回 0 呢*/
- 关于 - >和- >=是同理
- BETWEEN运算符的使用格式是 a BETWEEN min AND max ,当 a 大于等于 min 并且小于等于 max 时,返回 1,否则返回 0 。操作数类型不同的时候,会转换成相同的数据类型再进行处理。比如

- IS NULL和- IS NOT NULL表示的是是否为 NULL,ISNULL 为 true 返回 1,否则返回 0 ;IS NOT NULL 同理

- IN这个比较操作符判断某个值是否在一个集合中,使用方式是 xxx in (value1,value2,value3)

- LIKE运算符的格式是- xxx LIKE %123%,比如如下

当 like 后面跟的是 123% 的时候, xxx 如果是 123 则返回 1,如果是 123xxx 也返回 1,如果是 12 或者 1 就返回 0 。123 是一个整体。

- REGEX运算符的格式是- s REGEXP str,匹配时返回值为 1,否则返回 0 。

后面会详细介绍 regexp 的用法。
逻辑运算符
逻辑运算符指的就是布尔运算符,布尔运算符指返回真和假。MySQL 支持四种逻辑运算符
| 运算符 | 作用 | 
|---|---|
| NOT 或 ! | 逻辑非 | 
| AND 或者是 && | 逻辑与 | 
| OR 或者是 || | 逻辑或 | 
| XOR | 逻辑异或 | 
下面分别来介绍一下
- NOT或者是- !表示的是逻辑非,当操作数为 0(假) ,则返回值为 1,否则值为 0。但是有一点除外,那就是 NOT NULL 的返回值为 NULL

- AND和- &&表示的是逻辑与的逻辑,当所有操作数为非零值并且不为 NULL 时,结果为 1,但凡是有一个 0 则返回 0,操作数中有一个 null 则返回 null

- OR和- ||表示的是逻辑或,当两个操作数均为非 NULL 值时,如有任意一个操作数为非零值,则结果为 1,否则结果为 0。

- XOR表示逻辑异或,当任意一个操作数为 NULL 时,返回值为 NULL。对于非 NULL 的操作数,如果两个的逻辑真假值相异,则返回结果 1;否则返回 0。

位运算符
一听说位运算,就知道是和二进制有关的运算符了,位运算就是将给定的操作数转换为二进制后,对各个操作数的每一位都进行指定的逻辑运算,得到的二进制结果转换为十进制后就说是位运算的结果,下面是所有的位运算。
| 运算符 | 作用 | 
|---|---|
| & | 位与 | 
| | | 位或 | 
| ^ | 位异或 | 
| ~ | 位取反 | 
| >> | 位右移 | 
| << | 位左移 | 
下面分别来演示一下这些例子
- 位与指的就是按位与,把 & 双方转换为二进制再进行 & 操作

按位与是一个数值减小的操作
- 位或指的就是按位或,把 | 双方转换为二进制再进行 | 操作

位或是一个数值增大的操作
- 位异或指的就是对操作数的二进制位做异或操作

- 位取反指的就是对操作数的二进制位做- NOT操作,这里的操作数只能是一位,下面看一个经典的取反例子:对 1 做位取反,具体如下所示:

为什么会有这种现象,因为在 MySQL 中,常量数字默认会以 8 个字节来显示,8 个字节就是 64 位,常量 1 的二进制表示 63 个 0,加 1 个 1 , 位取反后就是 63 个 1 加一个 0 , 转换为二进制后就是 18446744073709551614,我们可以使用 select bin() 查看一下

- 位右移是对左操作数向右移动指定位数,例如 50 >> 3,就是对 50 取其二进制然后向右移三位,左边补上 0 ,转换结果如下

- 位左移与位右移相反,是对左操作数向左移动指定位数,例如 20 << 2
