【MySQL】运算符及相关函数详解
序号 | 系列文章 |
---|---|
3 | 【MySQL】MySQL基本数据类型 |
4 | 【MySQL】MySQL表的七大约束 |
5 | 【MySQL】字符集与校对集详解 |
6 | 【MySQL】MySQL单表操作详解 |
文章目录
- 前言
- MySQL运算符
- 1,算术运算符
- 1.1,算术运算符的基本使用
- 1.2,常用数学函数的基本使用
- 2,比较运算符
- 2.1,比较运算符的基本使用
- 2.2,常用比较函数的基本使用
- 3,逻辑运算符
- 3.1,逻辑运算符的基本使用
- 3.2,常用逻辑函数的基本使用
- 4,赋值运算符
- 4.1,赋值运算符的基本使用
- 5,位运算符
- 5.1,位运算符的基本使用
- 5.2,位运算相关函数基本使用
- 6,运算符优先级
- 6.1,何为运算符优先级
- 6.2,运算符优先级汇总
- 结语
前言
大家好,我是小杨!今天我将详细的为大家介绍MySQL中的运算符相关知识,希望大家能够从中收获多多!
MySQL运算符
在数据库操作时,数据的删除,查询,更新等操作都可以使用WHERE条件表达式来对获取到的符合条件的记录进行这些操作,此时就需要利用到MySQL中所提供的运算符。下面将对MySQL中的运算符进行详细的讲解。
1,算术运算符
1.1,算术运算符的基本使用
运算符 | 描述 | 示例 |
---|---|---|
+ | 加运算 | SELECT 5 + 2; |
- | 减运算 | SELECT 5 - 2; |
* | 乘运算 | SELECT 5 * 2; |
/ | 除运算 | SELECT 5 / 2; |
% | 取模运算 | SELECT 5 % 2; |
注意说明
- 在MySQL中,可以直接利用SELECT查询语句查看算术表达式的计算结果。
- 算术运算符适用于数值型类型的数据,通常应用于SELECT查询结果的字段中,在WHERE条件表达式中应用较少。
- 算术运算符两边的数据可以是真实的数据,也可以是数据表中的字段,而参与运算的数据称之为操作数,操作数与运算符组合在一起称之为表达式。
1)无符号的加减乘法运算
在MySQL中,若算术运算符
+
,-
,*
的操作数都为无符号整数,则运算结果也是无符号整数。
为了更加直观地理解无符号的加减乘运算,实例如下:
2)有符号的减法运算结果
在MySQL中,默认情况下算术运算符-
的操作数都是无符号的,则运算结果也是无符号的,若操作数的差值为负数,系统就会发生报错。
系统会发生报错的原因就是因为减法运算的结果已经超出无符号数值类型的取值范围,为了解决上述问题,可以将操作数改为有符号的。
MySQL中提供了将无符号的整型数据类型转换为有符号的整型数据,其基本语法为:
#方法1:
CAST(无符号整型字段 AS SIGNED)
#方法2:
CONVERT(无符号整型字段,SIGNED)
语法注意说明:
- 转换之后返回的值可能会发生变化,当无符号整型字段的值超过最大值可能会导致结果变为未定义。
- CONVERT() 函数更广泛的用途是将数据从一种类型转换为另一种类型,并且可以用来转换时间和字符串。函数中的前一个参数指定转换为的数据类型,后一个参数指定要转换之前的数据类型。
- MySQL 中并没有提供直接将无符号浮点数转换为有符号浮点数的函数。如果要进行转换,可以先将无符号浮点数转换为无符号整型,然后再将无符号整型转换为有符号整型。然后再转回为浮点数,但这样存在精度损失。
为了更加直观地理解cast和convert方法的使用,实例如下:
3)“ / ” 运算
在MySQL中,算术运算符
/
用于进行除法操作,并且运算结果使用浮点数表示。
语法说明:
- 除法操作的运算结果的精度由被除数的精度加上系统变量
div_precision_increment
设置的除法精度增长值。 - 除法运算中的被除数若为0,则系统显示的执行结果为NULL。
为了更加直观地理解算术运算符/
的使用,实例如下:
在这里,我们可以看到num为10时,对num分别进行除以3和除以5的运算,运算结果为啥都是精度为4的浮点数呢?
浮点数我们可以理解,因为使用/
进行除法操作的运算结果都为浮点数,这是规定了的,不管是可以整除还是无法整除的运算。
那为啥运算结果的精度都为4呢? 这就需要我们知道一个概念:除法精度增长值。
那除法精度增长值是啥呢? 除法精度增长值指的是在除法运算中,结果小数点后面保留的位数,即结果精度。
在MySQL中,我们可以通过以下命令完成查询系统设置的除法精度增长值的操作,语法如下:
SHOW VARIABLES LIKE 'div_precision_increment';
在这里,我们就可以看到当前系统下,系统设置的除法精度增长值为4,故进行除法操作时,运算结果的精度为4。
如果想要自己指定运算结果的精度,我们就可以使用 ROUND() 函数或者使用 TRUNCATE() 函数来进行指定精度。
4)NULL参与算术运算
在MySQL中,
NULL
值也可以作为操作数参与算术运算。
为了更加直观地理解NULL参与算术运算的操作,实例如下:
从上述操作结果中,我们不难看出:主要有NULL参与的算术运算,结果均为NULL。
由此可得结论:在进行加减乘除取模的算术运算中,如果操作数中有NULL值,则算术运算的结果均为NULL。
5)DIV和MOD运算符
在MySQL中,也可以使用DIV和MOD运算符进行参与算术运算。
1,为了更加直观地理解DIV运算符与/
运算符之间的差别,实例如下:
从上述操作结果中,我们不难看出DIV运算符与/
运算符的区别,对num进行DIV除法运算结果为整数,而/除法运算结果为浮点数。
2,为了更加直观地理解取模结果的正负,实例如下:
从上述操作结果中,我们可以发现取模结果的正负与被模数的符号相同,与模数的符号没有关系。
3,由此可得结论:
- 运算符DIV与
/
一样均能实现除法运算,区别在于前者的除法运算结果会去掉小数部分,只返回整数部分。 - 运算符MOD与
%
一样均能实现取模运算,取模结果的正负与被模数(%左边的操作数)的符号相同,与模数的符号无关。
1.2,常用数学函数的基本使用
运算符 | 描述 | 运算符小写 |
---|---|---|
CEIL(x) | 向上取整,返回大于等于x的最小整数 | ceil(x) |
FLOOR(x) | 向下取整,返回小于等于x的最大整数 | floor(x) |
FORMAT(x,y) | 返回小数点后保留y位的x(进行四舍五入) | format(x,y) |
ROUND(x[,y]) | 计算离x最近的整数;若设置参数y,与FORMAT(x,y)功能相同 | round(x[,y]) |
TRUNCATE(x,y) | 返回小数点后保留y位的x(舍弃多余小数位,不进行四舍五入) | truncate(x) |
ABS(x) | 获取x的绝对值 | abs(x) |
PI() | 计算圆周率 | PI() |
SQRT(x) | 计算x的平方根 | sqrt(x) |
MOD(x,y) | 求模运算,与x%y功能相类似 | mod(x,y) |
POW(x,y) | 幂运算函数,计算x的y次方,与POWER(x,y)功能相同 | pow(x,y) |
RAND() | 返回0到1之间的随机数,包括0和1 | rand() |
1,CEIL()与FLOOR()函数
CEIL(x)
函数:返回大于等于x的最小整数,简单理解为向上取整。
FLOOR(x)
函数:返回小于等于x的最大整数,简单理解为向下取整。
为了更加直观地理解CEIL()
与FLOOR()
函数的使用,实例如下:
2,FORMAT()与ROUND()函数
FORMAT()
函数:返回小数点后保留y位的x,会进行四舍五入
ROUND()
函数: 返回离x最近的整数;若设置参数y,与FORMAT(x,y)功能相同
1,为了更加直观地理解FORMAT()
函数与ROUND()
函数的使用,实例如下:
从上操作结果中,我们看到format()函数可以实现对num进行保留精度数的设置操作,当精度小于原本的精度时,会进行四舍五入。
由此可得结论:format()函数的返回结果是小数点后保留y位的x,当x的精度变小时,会进行四舍五入操作。
2,为了直观地理解ROUND()
函数有无参数y的区别,实例如下:
从上述结果中,我们可以看到当round()函数未使用参数y时,会直接返回离num最近的整数,若使用参数y,则会进行保留精度数操作。
由此可得结论:round()函数不加参数y的返回结果是进行四舍五入后的整数,加参数y的返回结果是小数点后保留y位的x浮点数。
3,为了更加直观地理解ROUND()
和FORMAT()
函数的联系,实例如下:
从上述结果中,我们可以看到当round()函数使用参数y时,其的功能与format()函数功能一模一样。
由此可得结论:在使用round()函数时,要特别注意函数中是否有参数y,知道有无参数y的函数分别所起的功能。
3,TRUNCATE()函数
TRUNCATE()
函数:返回保留小数点后y位的x,舍弃多余小数位,不进行四舍五入
1,为了更加直观地理解TRUNCATE()
函数的使用,实例如下:
从上述结果中,我们可以看到当truncate()函数设置的精度小于原本精度时,会直接进行舍去,不进行四舍五入操作。
由此可得结论:truncate()函数的返回结果是小数点后保留y位的x的数,当原精度更大时,舍弃多余小数位,不进行四舍五入。
2,为了更直观地理解TRUNCATE()
和FORMAT()
函数的区别,实例如下:
从上述结果中,我们可以看到当truncate()函数设置的精度小于原本精度时,会直接进行舍去,不进行四舍五入操作,而format()函数会进行四舍五入操作。
4,ABS()函数
ABS()
函数:返回参数x的绝对值
为了更加地理解ABS()
函数的使用,实例如下:
5,SQRT()与POW()函数
SQRT()
函数:用于计算参数x的平方根
POW()
函数:用于计算参数x的y次方值
1,为了更加地理解SQRT()
和POW()
函数的使用,实例如下:
2,为了更加地理解POW()
和POWER()
函数的使用,实例如下:
从上述操作结果中,我们可以看到pow()和power()的功能是一样的,都是用于计算参数x的y次方值。
由此可得结论:pow()和power()函数的功能相同,都是用于计算参数x的y次方值。
6,RAND()函数
RAND()
函数:用于返回0到1之间的随机数,包括0和1。
为了更加直观地理解RAND()
函数的使用,实例如下:
1,不带整数参数
从上述的操作结果中,我们可以看到使用rand()函数不带参数时,每次执行得到的结果都是不一样的。
2,带整数参数
从上述的操作结果中,我们可以看到使用rand()函数带上固定整数参数时,每次执行结果都是一样的,而带上不同的,执行结果也不一样。
由此可得结论:若要获取相同的随机数时,可以为rand函数添加整数参数,每次相同参数获取的随机值固定。
2,比较运算符
2.1,比较运算符的基本使用
符号运算符
运算符 | 描述 |
---|---|
= | 用于相等比较 |
<=> | 可进行NULL值比较的相等运算符 |
> | 表示大于比较 |
< | 表示小于比较 |
>= | 表示大于等于比较 |
<= | 表示小于等于比较 |
<> != | 表示不等于比较 |
注意事项:
- 上述所有的比较运算符都可以对数字和字符串进行比较操作。
- 比较运算符通常应用于条件表达式中,对结果进行限定操作。
- MySQL中的比较运算符的结果值有3种,分别为1(真),0(假),
NULL
。 - 比较运算符
=
,>
,<
,>=
,<=
,<>
,!=
在与NULL进行比较时,结果均为NULL。 - 当参与比较的操作数的数据类型不同时,系统会自动将其转换为同类型的数据,转换后再进行比较操作。
数据表准备
1,等号运算符
等号运算符
=
判断等号两边的值、字符串或表达式是否相等,如果相等则返回1,不相等则返回0。
在使用等号运算符时,遵循如下规则:
-
如果等号两边的值都是整数,则MySQL会按照整数来比较两个值的大小。
-
如果等号两边的值一个是整数,另一个是字符串,则MySQL会将字符串转化为数字进行比较。
-
如果等号两边的值、字符串或表达式中有一个为NULL,则比较结果为NULL。
-
如果等号两边的值、字符串或表达式都为字符串,则MySQL会按照字符串进行比较,其比较的是每个字符串中字符的ANSI编码是否相等。
为了更加直观地理解等号运算符的使用,实例如下:
1,用于表达式,比较两数是否相等
上述的一系列操作遵循上述所列规则,特别要注意,=
等号无法用来对NULL值进行比较。
2,用于条件判断,筛选符合条件的记录
2,安全等于运算符
在MySQL中,比较运算符
=
和<=>
均可以用于比较数据是否相等,两者的区别在于后者可以对NULL值进行比较。
当两个操作数均为NULL时,其返回值为1,而不为NULL;当一个操作数为NULL时,其返回值为0,而不为NULL。
为了更加直观地理解等号运算符的使用,实例如下:
1,用于表达式,比较两数是否相等
2,用于条件判断,筛选符合条件的记录
3,不等于运算符
不等于运算符
<>
和!=
用于判断两边的数字、字符串或者表达式的值是否不相等,如果不相等则返回1,相等则返回0。
不等于运算符不能判断NULL值。如果两边的值有任意一个为NULL,或两边都为NULL,则结果为NULL。
为了更加直观地理解不等于运算符的使用,实例如下:
1,用于表达式,比较两数是否不相等
2,用于条件判断,过滤不符合条件的记录
非符号运算符
运算符 | 描述 |
---|---|
BETWEEN…AND… | 比较一个数据是否在指定的闭合区域范围内,若在返回1,不在返回0 |
NOT BETWEEN…AND… | 比较一个数据是否不在指定的闭合区域范围内,若不在返回1,在返回0 |
IS | 比较一个数是否是TRUE,FALSE,UNKNOWN,若是返回1,不是返回0 |
IS NOT | 比较一个数是否不是TRUE,FALSE,UNKNOWN,若不是返回1,是返回0 |
IS NULL | 比较一个数是否是NULL,若是返回1,不是返回0 |
IS NOT NULL | 比较一个数是否不是NULL,若不是返回1,是返回0 |
IN | 比较一个值是否在一组给定的集合内,若是返回1,不是返回0 |
NOT IN | 比较一个值是否在一组给定的集合内,若不是返回1,是返回0 |
LIKE ‘匹配模式’ | 获取匹配到的数据 |
NOT LIKE ‘匹配模式’ | 获取匹配不到的数据 |
注意事项:
- 上述所有的比较运算符都可以对数字和字符串进行比较操作。
- 比较运算符通常应用于条件表达式中,对结果进行限定操作。
- MySQL中的比较运算符的结果值有3种,分别为1(真),0(假),
NULL
。
1,BETWEEN…AND…与NOT BETWEEN…AND…
在MySQL中,若想在条件表达式中对指定区间的数据进行判断时,可以使用利用运算符
BTWEEN...AND...
或NOT BTWEEN...AND...
。
为了更加直观地理解BTWEEN...AND...
和NOT BTWEEN...AND...
的使用,实例如下:
1,用于条件判断,筛选出成绩在90~100的数据记录
2,用于条件判断,筛选出成绩不在90~100的数据记录
2,IS 与 IS NOT
在MySQL中,
IS
和IS NOT
用于条件判断,其后可接 TRUE, FALSE, UNKNOWN, NULL。
其使用基本语法:
SELECT 字段列表 FROM 表名称 WHERE 字段名 IS [NOT] TRUE|FALSE|UNKNOWN|NULL;
为了更加深刻地理解IS
和IS NOT
的使用,实例如下:
1,用于条件判断,筛选出姓名为unknown的数据记录
2,用于条件判断,筛选出姓名不为unknown的数据记录
3,IS NULL 与IS NOT NULL
在MySQL中,若想在条件表达式中对字段进行是否为NULL值的判断时,可以使用运算符
IS NULL
或IS NOT NULL
。
空运算符 IS NULL
或者ISNULL
判断一个值是否为NULL,如果为NULL则返回1,否则返回0。
非空运算符IS NOT NULL
判断一个值是否不为NULL,如果为不NULL则返回1,否则返回0
为了更加深刻地理解IS NULL
和IS NOT NULL
的使用,实例如下:
1,用于条件判断,筛选出成绩为NULL值的数据记录
2,用于条件判断,筛选出成绩不为NULL值的数据记录
4,IN 与 NOT IN
在MySQL中,若想判断给定的值是否是IN列表中的一个值的判断时,可以使用运算符
IN
或NOT IN
。
IN
运算符用于判断给定的值是否是IN列表中的一个值,如果是则返回1,否则返回0。
NOT IN
运算符用于判断给定的值是否不是IN列表中的一个值,如果不是IN列表中的一个值,则返回1,否则返回0。
如果给定的值为NULL,或者IN列表中存在NULL,则结果为NULL。
为了更加深刻地理解IN
和NOT IN
的使用,实例如下:
1,小组id为2的学生信息查询
2,用于条件判断,筛选出成绩为给定集合内的值且小组id为2的数据记录
3,用于条件判断,筛选出成绩不为给定集合内的值且小组id为2的数据记录
5,LIKE 与 NOT LIKE
在MySQL中,若想用来匹配字符串并用于模糊匹配时,可以使用运算符
LIKE
或NOT LIKE
。
LIKE
运算符主要用来匹配字符串,通常用于模糊匹配,如果满足条件则返回1,否则返回0。
NOT LIKE
运算符主要用来匹配字符串,通常用于模糊匹配,如果不满足条件则返回1,否则返回0。
如果给定的值或者匹配条件为NULL,则返回结果为NULL。
为了更加深刻地理解LIKE
和 NOT LIKE
的使用,实例如下:
1,用于条件判断,筛选出模糊匹配成功且小组id为2的数据记录
2,用于条件判断,筛选出模糊匹配失败且小组id为2的数据记录
3,NULL实现模糊查询
6,正则匹配查询
在MySQL中查询数据时,除了可以使用LIKE实现模糊查询,还可以使用
REGREXP
关键字指定正则匹配模式完成正则匹配查询。
正则匹配查询的基本语法如下:
SELECT column1, column2, ... FROM table WHERE column REGEXP 'pattern';
其中,pattern是正则表达式模式,column是要进行匹配的字段,table是数据表名称。
为了更加深刻地理解正则匹配查询的操作,实例如下:
用于条件判断,筛选出描述字段name中含有yang或huo的数据记录
2.2,常用比较函数的基本使用
函数 | 描述 |
---|---|
GREATEST() | 返回最大的一个参数值,至少两个参数 |
LEAST() | 返回最小的一个参数值,至少两个参数 |
ISNULL() | 测试参数是否为空 |
COALESCE() | 返回第一个非空参数 |
INTERVAL() | 返回小于第一个参数的参数索引 |
STRCMP() | 比较两个字符串 |
1,GREATEST()和LEAST()
在MySQL中,
GREATEST()
和LEAST()
函数用于获取一组给定参数值中的最大和最小值。
GREATEST()
函数是用来获取一组给定值中的最大值。它接受一个或多个参数,返回这些参数中最大的值。
LEAST()
函数是用来获取一组给定值中的最大小值。它接受一个或多个参数,返回这些参数中最小的值。
GREATEST()
和LEAST()
可以用于比较不同类型的值,比较规则可以参考MySQL官方文档。
为了更好地理解GREATEST()
和LEAST()
的使用,举例如下:
1,均为数值
- 当参数值全为数值时,直接进行查询数值参数列表中最大和最小值。
2,数值与数值字符
- 当参数值为数值和数值字符时,会先对数值字符进行转换为数值的操作,再进行查询参数列表中的最大和最小值。
3,数值与NULL值
- 当参数值为数值和NULL值时,查询参数列表中的最大和最小值均为NULL值。
4,均为字符
- 当参数值全为字符时,会直接进行查询字符参数列表中的最小和最大值。
5,字符与NULL值
- 当参数值为字符和NULL值时,查询参数列表中的最大和最小值均为NULL值。
综上故可得出结论:GREATEST()
和LEAST()
函数在MySQL中是用于获取一组给定参数值中的最大和最小值。
2,ISNULL()
在MySQL中,
ISNULL()
函数用于检测一个值是否为 NULL。如果值为 NULL,该函数返回 1,否则返回 0。
为了更好地理解ISNULL()的使用,举例如下:
- 该函数用于判断参数是否为NULL值,当参数为NULL值时,返回结果为1;而当参数为非NULL值时,返回结果为0。
综上故可得结论:ISNULL()
函数在MySQL中是用于检测一个值是否为 NULL,如果是返回1,否则返回0。
3,COALESCE()
在MySQL中,
COALESCE()
函数用于返回第一个非 NULL 值。该函数接受任意数量的参数,并返回第一个非 NULL 的参数。
为了更好地理解COALESCE()
的使用,举例如下:
1,参数为NULL值和数值型
- 当参数为NULL值和数值型时,返回第一个非NULL值的数值12。
2,参数为NULL值和字符串型
- 当参数为NULL值和字符串型时,返回第一个非NULL值的字符串值ab。
3,参数全为NULL值或字符型
- 当参数全为NULL值时,返回NULL值。
综上故可得结论:COALESCE()
函数在MySQL中是用于返回第一个非 NULL 值参数。
4,STRCMP()
在MySQL中,
STRCMP()
函数是用来比较两个字符串的。该函数返回一个整数。
需要特别注意的是,STRCMP()
函数是严格区分大小写的。
为了更好地理解STRCMP()
的使用,举例如下:
从上述操作结果中,不难看出:如果第一个字符串小于第二个字符串,返回值为 -1;如果第一个字符串等于第二个字符串,返回值为 0;如果第一个字符串大于第二个字符串,返回值为 1。
综上故可得结论:STRCMP()
函数在MySQL中是用来比较两个字符串的,该函数返回一个整数。
3,逻辑运算符
3.1,逻辑运算符的基本使用
运算符 | 描述 |
---|---|
AND或&& | 逻辑与,操作数全为真,则结果为1,否则为0;逻辑判断同 |
OR 或 || | 逻辑或,操作数只要一个为真,则结果为1,否则为0;逻辑判断同 |
NOT或 ! | 逻辑非,操作数为0,结果为1,操作数为1,结果为0;逻辑判断同 |
XOR | 逻辑异或,操作数一个为真,一个为假,结果为1,操作数同为真或同为假,结果为0;逻辑判断同 |
注意事项:
- 逻辑运算符通常应用于条件表达式中的逻辑判断,与比较运算符结合使用。
- 参与逻辑运算的操作数以及逻辑判断的结果只有三种,分别为1(真),0(假),
NULL
。 - 上述逻辑运算符中仅有逻辑非是一元运算符,其余的逻辑运算符均为二元运算符。
NOT
和!
尽管功能相同,但是在同一个表达式中出现时,先运算!
,再运算NOT
。
1,逻辑与
- 在操作时,若逻辑与的两边操作数全为真时,则结果为1,否则为0;若逻辑与的两边逻辑判断全为真时,才满足条件。
- 在操作时,若使用
&&
连接多个相等比较的条件时,可以使用(a,b)=(x,y)
的方法简化条件表达式(a=x)&&(b=y)
。 - 在操作时,若操作数中含有NULL,不管另外一个操作数是非0,还是0,结果均为0。
为了更好地理解逻辑与运算符的使用,实例如下:
1,用于算术表达式
2,用于条件判断,筛选出满足所有条件的数据记录
2,逻辑或
- 在操作时,若逻辑或的两边操作数全为假时,结果才为0,否则为1;若逻辑与的两边逻辑判断全为假时,才不满足条件。
- 在操作时,若操作数中含有NULL,此时另外一个操作数如果为非0,则结果为1;另外一个操作数如果为0,则结果为NULL。
为了更好地理解逻辑或运算符的使用,实例如下:
1,用于表达式
2,用于条件判断,筛选出满足所有条件中的一个条件的数据记录
注意:OR可以和AND一起使用,但是在使用时要特别注意两者的优先级,由于AND的优先级高于OR的,因此先对AND两边的操作数进行操作,再与OR中的操作数结合。
3,逻辑非
- 逻辑非仅有一个操作数,为一元运算符。
- 在操作时,若操作数为0时,则运算结果为1;若操作数为非0时,则运算结果为0;若操作数为NULL,则运算结果为NULL。
为了更好地理解逻辑非运算符的使用,实例如下:
1,用于算术表达式
4,逻辑异或
逻辑异或操作,表示两个操作数都为1或0,则结果为0;若两个操作数一个为1,一个为0,则结果为1,若操作数为NULL,则结果为NULL。
为了更好地理解逻辑异或运算符的使用,实例如下:
1,用于算术表达式
3.2,常用逻辑函数的基本使用
函数 | 描述 |
---|---|
IF() | 根据给定条件返回一个值 |
IFNULL() | 如果第一个参数不为 NULL,则返回第一个参数,否则返回第二个参数 |
NULLIF() | 如果第一个参数等于第二个参数,则返回 NULL,否则返回第一个参数 |
CASE() | 在多个条件之间进行选择,可以根据某个字段的值来选择不同的结果 |
1,IF()
在MySQL中,
IF()
函数用于根据给定条件返回一个值。该函数接受三个参数:
- 第一个参数是一个布尔表达式,即需要检测的条件。
- 第二个参数是条件为真时要返回的值。
- 第三个参数是条件为假时要返回的值。
为了更好地理解IF()
函数的使用,实例如下:
从上述操作结果中,不难看出:当第1个参数给定条件成立时,返回第2个参数,给定条件不成立时,返回第3个参数。
综上故可得出结论:IF()
函数在MySQL中用于根据给定条件是否成立,返回一个值,与检测条件?参数1:参数2
语法相类似。
2,IFNULL()
在 MySQL 中,
IFNULL()
函数用于判断第一个参数是否为 NULL,如果不是,则返回第一个参数,如果是,则返回第二个参数。
IFNULL() 与 ISNULL() 的作用类似,但 IFNULL() 返回第二个参数而 ISNULL() 返回 1/0 来表示是否为 NULL。
为了更好地理解IFNULL()
函数的使用,实例如下:
从上述操作结果中,不难看出:当第1个参数不为NULL时,返回第1个参数;当为NULL时,则返回第2个参数。
综上故可得出结论:IFNULL()
函数在MySQL中用于判断第一个参数是否为 NULL值,如果是,返回第1个参数,否则返回第2个参数。
3,NULLIF()
在 MySQL 中,
NULLIF()
函数用于比较两个表达式的值,如果相等则返回 NULL,否则返回第一个表达式的值。
为了更好地理解NULLIF()
函数的使用,实例如下:
从上述操作结果中,不难看出:当两个参数的值相等时,返回NULL;当两个参数的值不相等时,则返回第1个参数。
综上故可得出结论:NULLIF()
函数在MySQL中用于比较两个参数的值,如果相等则返回 NULL,否则返回第1个参数的值。
4,CASE()
在MySQL中,
CASE
语句用于在多个条件之间进行选择,可以根据某个字段的值来选择不同的结果。
为了更好地理解CASE()
函数的使用,实例如下:
在上述操作中,会对每一行的str值进行判断,如果等于’A’ 返回’Apple’,等于’B’返回’Banana’,等于’C’返回’Cat’,等于’D’返回’Dog’,否则返回’unknown’。
故可得出结论:CASE
语句在MySQL中用于在多个条件之间进行选择,根据某个字段的值来选择不同的结果。
4,赋值运算符
4.1,赋值运算符的基本使用
在MySQL中,
=
是一个比较特殊的运算符,既可以作为比较运算符,用于比较数据是否相等;也可以作为赋值运算符,表示赋值。
为了避免系统分不清=
是赋值运算符还是比较运算符,MySQL添加一个新的符号:=
来用于表示赋值运算。
在MySQL中,INSERT ...SET
和 UPDATE ... SET
中出现的运算符=
都会被看作是赋值运算符,而其它情况建议使用:=
来表示赋值。
为了更好地理解赋值运算符的使用,实例如下:
1,修改表选项时使用
2,修改表数据时使用
3,添加数据时使用
5,位运算符
5.1,位运算符的基本使用
运算符 | 描述 | 示例 |
---|---|---|
& | 按位与 | SELECT b’1001’ & b’1011’; 结果为9 |
| | 按位或 | SELECT b’1001’ | b’1011’; 结果为11 |
^ | 按位异或 | SELECT b’1001’ ^ b’1011’; 结果为2 |
<< | 按位左移 | SELECT b’1001’ << 2; 结果为36 |
>> | 按位右移 | SELECT b’1001’ >> 2’; 结果为2 |
~ | 按位取反 | SELECT ~ b’1001’ & b’1011’; 结果为2 |
注意说明:
- 位运算符是针对二进制数的每一位比特位进行运算的符号,运算结果类型为BIGINT,最大范围可以是64位。
- MySQL5.7参与位运算的数据只能是BIGINT类型的(64位的整数),而在MySQL8.0中则允许二进制字符串类型的参数。
- MySQL5.7中二进制类型字段的位运算可能在MySQL8.0中产生不同的结果,系统也会报相关的警告信息。
- 为解决上述问题,在进行位运算时,可以使用
CAST(...AS UNSIGNED)
将二进制字符串类型的数据可显式转为BIGINT类型数据。
1,按位与
按位与
&
运算符将给定值对应的二进制数逐位进行逻辑与运算。当给定值对应的二进制位的数值都为1时,则该二进制位返回1,否则返回0。
为了更加深刻地理解按位与的使用,实例如下:
1,按位与运算操作
2,按位与运算操作分析
分析说明:只有当给定值对应的二进制位的数值都为1时,则该二进制位才会返回1,其余情况均返回0。
2,按位或
按位或
|
运算符将给定的值对应的二进制数逐位进行逻辑或运算。当给定值对应的二进制位的数值有一个或两个为1时,则该二进制位返回1,否则返回0。
为了更加深刻地理解按位或的使用,实例如下:
1,按位或运算操作
2,按位或运算操作分析
分析说明:只有当给定值对应的二进制位的数值都为0时,则该二进制位才会返回0,其余情况均返回1。
3,按位异或
按位异或
^
运算符将给定的值对应的二进制数逐位进行逻辑异或运算。当给定值对应的二进制位的数值不同时,则该二进制位返回1,否则返回0。
为了更加深刻地理解按位异或的使用,实例如下:
1,按位异或运算操作
2,按位异或运算操作分析
分析说明:只有当给定值对应的二进制位的数值不同时,则该二进制位才会返回1,否则返回0。
4,按位左移
按位左移
<<
运算符将给定的值的二进制数的所有位左移指定的位数。左移指定的位数后,左边高位的数值被移出并丢弃,右边低位空出的位置用0补齐。
为了更加深刻地理解按位左移的使用,实例如下:
1,按位左移运算操作
2,按位左移运算操作分析
分析说明:当给定值对应二进制数的所有位左移指定的位数,左移指定的位数后,左边高位的数值被移出并丢弃,右边低位空出的位置用0补齐。
5,按位右移
按位右移
>>
运算符将给定的值的二进制数的所有位右移指定的位数。右移指定的位数后,右边低位的数值被移出并丢弃,左边高位空出的位置用0补齐。
为了更加深刻地理解按位右移的使用,实例如下:
1,按位右移运算操作
2,按位右移运算操作分析
分析说明:当给定值对应的二进制数的所有位右移指定的位数。右移指定的位数后,右边低位的数值被移出并丢弃,左边高位空出的位置用0补齐。
6,按位取反
按位取反
~
运算符将给定的值的二进制数逐位进行取反操作,即将1变为0,将0变为1。
为了更加深刻地理解按位取反的使用,实例如下:
1,按位取反运算操作
2,按位取反运算操作分析
分析说明:对给定值对应的二进制数的所有位逐一进行取反操作,将二进制为1的变为0,二进制为0的变为1。
5.2,位运算相关函数基本使用
函数 | 描述 |
---|---|
BIT_COUNT(N) | 返回在参数N设置的比特位(二进制位为1)数量 |
BIT_AND() | 按位返回与的结果 |
BIT_OR() | 按位返回或的结果 |
BIT_XOR() | 按位返回异或的结果 |
注意说明:
- 这些函数在处理大量数据时可能会变得很慢,需要根据实际情况谨慎使用。
BIT_AND()
,BIT_OR()
和BIT_XOR()
这三类函数可以以整型字段为参数,对该整型字段所有值进行按位操作。
1,BIT_COUNT()
BIT_COUNT()
函数的返回结果为参数的二进制位为1的比特位数量。
为了更加深刻地理解BIT_COUNT()
函数的使用,实例如下:
1,统计12,7,3这三个参数的二进制位为1的比特位数量
2,操作分析
分析说明:对给定值对应的二进制数的所有位逐一进行统计操作,统计二进制位为1的比特位数量。
6,运算符优先级
6.1,何为运算符优先级
运算符优先级可以简单理解为运算符在一个表达式中参与运算的先后顺序。
优先级别越高,则越早参与运算;运算级别越低,则越晚参与运算。
6.2,运算符优先级汇总
运算符 | 优先级别 |
---|---|
! | 15 |
-(负数),~(按位取反) | 14 |
^ | 13 |
*,/,%,DIV,MOD | 12 |
-(减号),+ | 11 |
<<,>> | 10 |
& | 9 |
| | 8 |
=(比较运算符),<=>,>=,>,<=,<,<>,!=,IS,LIKE,REGEXP,IN | 7 |
BETWEEN,CASE,WHEN,THEN,ELSE | 6 |
NOT | 5 |
AND,&& | 4 |
XOR | 3 |
OR,|| | 2 |
=(赋值运算符),:= | 1 |
注意说明:
- MySQL中的运算符优先级定义了不同运算符之间的执行顺序。优先级高的运算符会先于优先级低的运算符执行。
- 同行的运算符具有相同的优先级,除赋值运算符从右到左运算外,其余同级别的运算符,在同一表达式中出现时,执行顺序从左到右依次执行。
- 若要提升运算符的优先级别,可以使用圆括号
()
,当表达式中同时出现多个圆括号时,最内层的圆括号中的表达式的优先级最高。 - 在实际操作时,遇到复杂的表达式需要适当地添加圆括号,使结构更为清晰,避免因分不清运算优先级顺序而导致运算发生错误。
结语
这就是本期博客的全部内容啦,想必大家已经对MySQL中的运算符的相关知识有了全新地认识和理解吧,如果有什么其他的问题无法自己解决,可以在评论区留言哦!
最后,如果你觉得这篇文章写的还不错的话或者有所收获的话,麻烦小伙伴们动动你们的小手,给个三连呗(点赞👍,评论✍,收藏📖),多多支持一下!各位的支持是我最大的动力,后期不断更新优质的内容来帮助大家,一起进步。那我们下期见!