第十八节:MySQL中的运算符
- MySQL 支持 4 种运算符:
- 算术运算符:包括加、减、乘、除等,用来执行算术运算
- 比较运算符:包括大于、小于、in或者not null等等。主要用于数值的比较、字符串的匹配等方面
- 逻辑运算符:包括与、或、非和异或等逻辑运算符。其返回值为布尔型,真值(1 或 true)和假值(0 或 false)
- 位运算符:包括按位与、按位或、按位取反、按位异或、按位左移和按位右移等位运算符。位运算必须先将数据转换为二进制,然后在二进制格式下进行运算,最后将二进制的值转换为原来的类型
算术运算符
- 语法格式:表达式1 算术运算符 表达式2
- 实例:
- select id/2 from Teacher;
- select id*2;
- MySQL 中的算术运算符如下:
算术运算符 说明 + 加法运算 - 减法运算 * 乘法运算 / 除法运算,返回商 % 求余运算,返回余数
比较运算符
- 语法:表达式1 比较运算符 表达式2
- MySQL 中的比价运算符如下:
比较运算符 说明 = 等于 < 小于 <= 小于等于 > 大于 >= 大于等于 <=> 安全的等于,不会返回 UNKNOWN <> 或!= 不等于 IS NULL 或 ISNULL 判断一个值是否为 NULL IS NOT NULL 判断一个值是否不为 NULL LEAST 当有两个或多个参数时,返回最小值 GREATEST 当有两个或多个参数时,返回最大值 BETWEEN AND 判断一个值是否落在两个值之间 IN 判断一个值是IN列表中的任意一个值 NOT IN 判断一个值不是IN列表中的任意一个值 LIKE 通配符匹配 REGEXP 正则表达式匹配 - =、<、<=、>、>=、<> 、!=:用于数字、字符串、表达式的判断。如果正确则返回值为 1;如果错误则返回值为 0。不能用于判断空值(NULL)
select 'he'=null;# 只要有一个表达式的值为null,则返回结果为null select 2>'1'; # 若一个字符串和数字进行相等判断,则 MySQL 可以自动将字符串转换成数字。
- 安全等于运算符(<=>):用于数字、字符串、表达式的判断。如果相等则返回值为 1;否则返回值为 0。可以用于判断空值(NULL)
select null<=>null; # 当两个表达式彼此相等或都等于空值时,比较结果为 TRUE; select 2<=>null; #若其中一个是空值或者都是非空值但不相等时,则为 FALSE
- is null (isnull):用于判断表达式是否为 NULL,如果为 NULL,返回值为 1;否则返回值为 0
select 1 is null; select info is null from Teacher;
- is not null:用于判断表达式是否为非 NULL,如果为非 NULL,返回值为 1;否则返回值为 0
select 1 is not null; select info is not null from Teacher;
-
between and:用于判断表达式是否在一个闭区间中,如果值在区间中,返回值为 1;否则返回值为 0
语法格式为:表达式 BETWEEN 最小值 AND 最大值select 9 between 0 and 9; #返回值为1 select 'hello' between 0 and 9; #则 MySQL 可以自动将字符串转换成数字,返回值为1
- least:用于比较多个值,返回最小值,若任何一个值为null,则返回null
语法格式:least(值1,值2,…,值n) select least(11,2,4,6); # 返回值为2 select least(11,2,4,6,null);# 返回值为null select least(11,2,4,6,'z'); # 返回值为0
- greatest:用于比较多个值,返回最大值,若任何一个值为null,则返回null
语法格式:greatest(值1,值2,…,值n) select greatest(11,2,4,6); # 返回值为11 select greatest(11,2,4,6,null);# 返回值为null select greatest(11,2,4,6,'z'); # 返回值为11
- in:用于判断表达式的值是否为in列表中的一个值,如果是返回值为1;否则返回值为 0
语法格式:表达式 in(值1,值2,…,值n) select 8 in(1,2,3,4,5,6,'hello'); #返回值为0 select 8 in(1,2,3,4,5,6,'8'); #返回值为1
- not in :用于判断表达式的值是否为in列表中的一个值,如果不是返回值为1;否则返回值为 0
select 8 not in(1,2,3,4,5,6,'hello'); #返回值为1 select 8 not in(1,2,3,4,5,6,'8'); #返回值为0
逻辑运算符
- 逻辑运算符用来判断表达式的真假,所有逻辑运算符求值所得的结果均为 TRUE、FALSE 或 NULL
- MySQL 中的逻辑运算符如下
逻辑运算符 说明 NOT 或者 ! 逻辑非 AND 或者 && 逻辑与 OR 或者 || 逻辑或 XOR 逻辑异或 - NOT或者!:逻辑非运算符,表示当操作数为 0 时,返回值为 1;当操作数为非零值时,返回值为 0;当操作数为 NULL 时,返回值为 NULL
select not 3; # 返回值是0 select not id from Teacher; select not 0; # 返回值是1 select not null;# 返回值是null
- AND 或者 &&:逻辑与运算符,表示当所有的操作数不为0或null,返回值为1;当操作数有一个值为0 时候,返回值为0;其他的为null
select 5 and 2; # 返回值是1 select 5 and 0; # 返回值是0 select 0 and null; # 返回值是0 select 1 and null; # 返回值是null
- OR 或者 || :逻辑或运算符,当操作数有值为非0和null值时,返回值为1;当操作符都为0 时候,返回值为0,其他的为null
select 1 or 0; # 返回值是1 select 3 or null; # 返回值是1 select 0 or null; # 返回值是null
- XOR : 逻辑异或运算符,当任意一个操作数为 NULL 时,返回值为 NULL;当所有的操作数都不为null时候,若所有的操作数都为0或者都不为0时候则返回值为0,若有的操作数为0有的不为0 则返回值为1
select 6 xor null; # 返回值是null select 0 xor 0; # 返回值是0 select 1 xor 0; # 返回值是1
位运算符
- 位运算符:是在二进制数上进行计算的运算符,会先将操作数变成二进制数,进行位运算,然后再将计算结果从二进制数变回十进制数
-
位运算符 说明 | 按位或 & 按位与 ^ 按位异或 << 按位左移 >> 按位右移 ~ 按位取反,反转所有比特 - 位或运算符(|): 位或运算的实质是将参与运算的两个数据按对应的二进制数逐位进行逻辑或运算。若对应的二进制位有一个或两个为 1,则该位的运算结果为 1,否则为 0
select 4|3; # 返回值是7
- 位与运算符(&):位与运算的实质是将参与运算的两个数据按对应的二进制数逐位进行逻辑与运算。若对应的二进制位都为 1,则该位的运算结果为 1,否则为 0
select 3&4;
- 位异或运算符(^):位异或运算的实质是将参与运算的两个数据按对应的二进制数逐位进行逻辑异或运算。对应的二进制位不同时,对应位的结果才为 1。如果两个对应位都为 0 或者都为 1,则对应位的结果为 0
select 1 ^3;
- 位左移运算符(<<):使指定的二进制值的所有位都左移指定的位数。左移指定位数之后,左边高位的数值将被移出并丢弃,右边低位空出的位置用 0 补齐
//语法格式:表达式<< n //语法解释:n 指定值要移位的位数 select 8<<2; # 返回值为32
- 位右移运算符(>>):使指定的二进制值的所有位都右移指定的位数。右移指定位数之后,右边高位的数值将被移出并丢弃,左边低位空出的位置用 0 补齐
语法格式:表达式>> n 语法解释:n 指定值要移位的位数 select 8<<2; # 返回值为2
- 位取反运算符(~):位取反运算符的实质是将参与运算的数据按对应的二进制数逐位反转,即 1 取反后变 0,0 取反后变为 1
select ~3;
运算符的优先级
运算符的优先级别决定了运算符在表达式中运算的先后顺序
下表列出了 MySQL 中的各类运算符及其优先级
优先级由低到高排列 | 运算符 |
---|---|
1 | =(赋值运算)、:= |
2 | II、OR |
3 | XOR |
4 | &&、AND |
5 | NOT |
6 | BETWEEN、CASE、WHEN、THEN、ELSE |
7 | =(比较运算)、<=>、>=、>、<=、<、<>、!=、 IS、LIKE、REGEXP、IN |
8 | | |
9 | & |
10 | <<、>> |
11 | -(减号)、+ |
12 | *、/、% |
13 | ^ |
14 | -(负号)、〜(位反转) |
15 | ! |