🧑 博主简介: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