MySQL支持多种类型的运算符,这些运算符可以用来连接表达式的项。这些类型主要包括算术运算符、比较运算符、逻辑运算符、位运算符。本节将通过实例对MySQL支持的这几种运算符进行详细的介绍。
1.算术运算符
MySQL支持的算术运算符:加、减、乘、除和模运算。它们是最常使用、最简单的一类运算符。下表列出了这些运算符极其作用。
运算符 | 作用 |
+ | 加法 |
- | 减法 |
* | 乘法 |
/,DIV | 除法,返回商 |
%,MOD | 除法,返回余数 |
简单描述一下这几种运算符的使用方法:
“+”:用于获取一个或多个值得和。
“-”:用于从一个值中减去另一个值。
“*”:使用数字相乘,得到两个或多个值的乘积。
“/”:用一个值除以另一个值得到商。
“%”:用一个值除以另一个值得到余数。
下面通过实例学习一下各种运算符的使用:
【这里不一一列实例了,直接给出全部的运算符使用方式,SQL语句也可根据各运算符进行拆分书写】
算术运算符的使用
【注意】在除法运算和模运算中,如果除数为0,将是非法除数,返回结果为NULL
示例:
对于模运算,可使用MOD(a,b)函数与a%b效果一样:
2.比较运算符
熟悉了最简单的算术运算符之后,我们再来看一下比较运算符。当使用select语句进行查询时,MySQL允许用户对表达式左边操作数和右边操作数进行比较,比较结果为真,则返回1,为假则返回0,比较结果不确定则返回NULL。
MySQL支持的比较运算符:
运算符 | 作 用 |
= | 等于 |
<>或!= | 不等于 |
<=> | NULL安全的等于(NULL-safe) |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
BETWEEN | 存在于指定范围 |
IN | 存在于指定集合 |
IS NULL | 为NULL |
IS NOT NULL | 不为NULL |
LIKE | 通配符匹配 |
REGEXP或RLIKE | 正则表达式匹配 |
比较运算符可以用于比较数字、字符串和表达式。数字作为浮点数比较,字符串以不区分大小写的方式进行比较。下面通过实例学习一下各种运算符的使用:
▲“=”运算符,用于比较运算符两侧的操作数是否相等,如果两侧操作数相等,则返回值为1,否则为0。
【注意】NULL不能用于“=”比较
▲“<>”运算符,和“=”相反,如果两侧操作数不等,则值为1,否则为0。
【注意】NULL不能用于“<>”比较。
▲“<=>”运算符,和“=”类似,在操作数相等时值为1,不同之处在于即使操作的值为NULL也可以正确地比较。
▲“<”运算符,当左侧操作数小于右侧操作数时,其返回值为1,否则为0。
mysql>select 'a'<'b','a'<'a','a'<'c',1<2;
▲“<=”运算符,当左侧操作数小于等于右侧操作数时,其返回值为1,否则为0。
▲“>”运算符、“>=”运算符同理。
【图略】
▲“BETWEEN”运算符的格式为“a BETWEEN min AND max”,当a大于等于min并且小于等于max,则返回值为1,否则返回0;当操作数a、min、max类型相同时,此表达式等价于(a>=min and a<=max),当操作数类型不同时,比较时会遵循类型转换原则进行转换后,再进行比较运算。
mysql>select 10 between 10 and 20,9 between 10 and 20;
▲“IN“运算符的使用格式:”a IN (value1,value2,....)“,当a的值存在于表中时,则整个表达式返回值为1,否则返回0。
▲“IS NULL”运算符使用格式为“a IS NULL”,a的值为NULL,则返回1,否则返回0;
▲“IS NOT NULL”运算符的使用格式为“a IS NOT NULL”,和“IS NULL”相反。a的值为不为NULL,则返回值1,否则返回0。
▲“LIKE”运算符使用格式“a LIKE %123%”,当a中含有字符串“%123%”时,则返回值为1,否则返回0。
▲“REGEXP”运算符的使用格式为“str REGEXP str_pat”,当str字符串中含有str_pat匹配的字符串是,则返回值为1,否则返回为0。
3.逻辑运算符
逻辑运算符,及布尔运算符,确认表达式的真和假。
具体分类如下:
运算符 | 作用 |
NOT 或 ! | 逻辑非 |
AND 或 && | 逻辑与 |
OR 或 || | 逻辑或 |
XOR | 逻辑与或 |
▲“NOT”或“!”,返回和操作数相反的结果:当操作数为0(假),则返回值为1,否则返回值为0.
【注】NOT NULL的返回值为NULL。
▲“AND”或“&&”,逻辑与运算。当所有的操作数均为非零值并且不为null时,计算所得结果为1,当一个或多个操作数为0时,所得结果为0,操作数中有任何一个为null则返回值为null。
▲“OR”或“||”,逻辑或运算。当两个操作数均为非null值时,如有任意一个操作数为非零值,则结果为1,否则结果为0。当有一个操作数为null时,如另一个操作数为非零值,则结果为1,否则结果为null。假如两个操作数均为null,则所得结果为null。
▲“XOR“,逻辑异或。当任意一个操作数为null时,返回值为null。对于非null的操作数,如果两个的逻辑真假值相异,则返回结果1,否则返回0.
4.位运算符
位运算符是将给定的数据转化为二进制后,对各个数据每一位进行制定的逻辑运算,得到的二进制结果转换为十进制数后就是位运算的结果。MySQL支持6中位运算符,如下表所示。
运算符 | 作用 |
& | 位与(位AND) |
| | 位或(位OR) |
/\ | 位异或(位XOR) |
~ | 位取反 |
>> | 位右移 |
<< | 位左移 |
可以发现,位运算符中的位与&和位或|和前面介绍的逻辑与和逻辑或非常类型。其他操作符和逻辑操作有所不同。
▲“&,位与“,对多个操作数的二进制位做逻辑与操作。如2&3,2对应的二进制数是10,3对应11,所有10&11的结果是10,十进制数字还是2,来看实际结果:
▲“^,位异或“
▲“~,位取反“对二进制位数做NOT操作,对1进行取反,实际结果:
结果令人疑惑,1的位取反怎么会是这么大的数字?在MySQL中,常量数字默认是以8个字节来表示,8个字节就是64位,常量1的二进制表示为63个0,加一个1,位取反后就是63个“1”加一个“0”,转为二进制数就如:
5.运算符的优先级
前面介绍了MySQL支持的各种运算符的使用方法。在实际的应用中,很可能将这些运算符进行混合运算,那么应该先进行哪些运算符的操作呢。
优先级顺序 | 运算符 |
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 | ! |
实际上,很少将这些优先级熟练的记忆,很多情况下我们都是使用"()"将需要优先的操作括起来,这样既起到了优先的作用,又使得其他用户看起来更容易理解。
愿你就像早晨八九点钟的太阳,活力十足,永远年轻。