首页Mysql的运算符
Created At : 2021-11-14

Mysql的运算符

运算符是编程语言中最常用的术语,在Mysql中同样有广泛的应用。

运算符是指定要在表达式中执行的计算类型的标志或符号。

在Mysql中运用运算符可以更加灵活地使用表中的数据,常见的运算符类型有算术运算符、比较运算符、逻辑运算符和位运算符。

运算符分类

1.算术运算符

算术运算符用于各类数值运算,包括加**(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)**。

2.比较运算符

比较运算符用于比较运算,包括大于(>)、小于(<)、等于(=)、大于等于(>=)、小于等于(<=)、不等于(!=),以及IN、BETWEEN AND、ISNULL、GREATEST、LEAST、LIKE、REGEXP等。

3.逻辑运算符

逻辑运算符的求值所得结果均为1(TRUE)、0(FALSE),这类运算符有逻辑非(NOT或者!)、逻辑与(AND或者&&)、逻辑或(OR或者||)、逻辑异或(XOR)

4.位运算符

位运算符参与运算的操作数按二进制位进行运算,包括**位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)**6种。

操作演示

示例数据库test,有tb1表:

name  |age|score|
------+---+-----+
Jack  |18 |61   |
XiaoMa|28 |88   |
Lucy  |16 |57   |

算术运算符

查询Jack的信息,并计算10年以后的年龄

select age + 10  as '10年年以后的年龄' from tb1 where name = 'Jack';

## 结果
10年年以后的年
---------+
     28.0|

在数学运算时,除数为0的除法是没有意义的,因此除法运算中的除数不能为0,如果被0除,则返回结果为NULL。

select score /0 from tb1 where name = 'Jack';

## 结果
score /0|
--------+
        |

比较运算符

一个比较运算符的结果总是1、0或者是NULL。

比较运算符经常在SELECT的查询条件子句中使用,用来查询满足指定条件的记录。

下表是Mysql8 中的所有的比较运算符(以及比较函数):

Comparison Operators

NameDescription
>Greater than operator, 大于
>=Greater than or equal operator,大于等于
<Less than operator,小于
<>, !=Not equal operator,不等于
<=Less than or equal operator,小于等于
<=>NULL-safe equal to operator,空安全等于运算符,如果比较的两个值都是null,返回1
=Equal operator,等于
BETWEEN ... AND ...Whether a value is within a range of values,判断一个值在区间范围内
COALESCE()Return the first non-NULL argument,返回参数总最近的非空值,如果没有返回null
GREATEST()Return the largest argument,返回参数中最大值
IN()Whether a value is within a set of values,判断一个值是否是其中的任何一个,返回0或1
INTERVAL()Return the index of the argument that is less than the first argument,区间判断,返回分段后的结果
ISTest a value against a boolean,判断一个值是否是布尔值
IS NOTTest a value against a boolean,判断一个值是否不是布尔值
IS NOT NULLNOT NULL value test,判断一个值不是null
IS NULLNULL value test,判断一个值是null
ISNULL()Test whether the argument is NULL,测试参数是null
LEAST()Return the smallest argument,返回最小的参数
LIKESimple pattern matching,模糊匹配
NOT BETWEEN ... AND ...Whether a value is not within a range of values,判断一个值不在区间范围内
NOT IN()Whether a value is not within a set of values,判断一个值是否不是其中的任何一个
NOT LIKENegation of simple pattern matching,模块匹配
STRCMP()Compare two strings,字符串比较
mysql> SELECT 1 = 0;
        -> 0
mysql> SELECT '0' = 0;
        -> 1
mysql> SELECT '0.0' = 0;
        -> 1
mysql> SELECT '0.01' = 0;
        -> 0
mysql> SELECT '.01' = 0.01;
        -> 1
mysql> SELECT null = null;
        ->        
# 1.  在进行判断时,‘0’=0的返回值相同,都为1。因为在进行判断时,MySQL自动进行了转换,把字符‘0’转换成了数字0
# 2.  = 不能进行null 空值的判断

TIP

数值比较时有如下规则:

(1)若有一个或两个参数为NULL,则比较运算的结果为NULL。

(2)若同一个比较运算中的两个参数都是字符串,则按照字符串进行比较。

(3)若两个参数均为整数,则按照整数进行比较。

(4)若用字符串和数字进行相等判断,则MySQL可以自动将字符串转换为数字。

安全等于运算符(<=>)

这个操作符和=操作符执行相同的比较操作,不过<=>可以用来判断NULL值。

在两个操作数均为NULL时,其返回值为1,而不为NULL;当一个操作数为NULL时,其返回值为0,而不为NULL。

mysql> select null <=> null , 1<=>null 

# 结果:
null <=> null|1<=>null|
-------------+--------+
            1|       0|

逻辑运算符

在SQL中,所有逻辑运算符的求值所得结果均为TRUE、FALSE或NULL。

在MySQL中,它们体现为1(TRUE)、0(FALSE)和NULL。

NameDescription
AND, &&Logical AND
NOT, !Negates value
[`OR`, `
XORLogical XOR
# NOT, !
mysql> SELECT NOT 10;
        -> 0
mysql> SELECT NOT 0;
        -> 1
mysql> SELECT NOT NULL;
        -> NULL
mysql> SELECT ! (1+1);
        -> 0
mysql> SELECT ! 1+1;
        -> 1


# AND, &&
mysql> SELECT 1 AND 1;
        -> 1
mysql> SELECT 1 AND 0;
        -> 0
mysql> SELECT 1 AND NULL;
        -> NULL
mysql> SELECT 0 AND NULL;
        -> 0
mysql> SELECT NULL AND 0;
        -> 0


# OR, ||
mysql> SELECT 1 OR 1;
        -> 1
mysql> SELECT 1 OR 0;
        -> 1
mysql> SELECT 0 OR 0;
        -> 0
mysql> SELECT 0 OR NULL;
        -> NULL
mysql> SELECT 1 OR NULL;
        -> 1


# XOR
# a XOR b is mathematically equal to (a AND (NOT b)) OR ((NOT a) and b).
mysql> SELECT 1 XOR 1;
        -> 0
mysql> SELECT 1 XOR 0;
        -> 1
mysql> SELECT 1 XOR NULL;
        -> NULL
mysql> SELECT 1 XOR 1 XOR 1;
        -> 1
  

位运算符

位运算符是在二进制数上进行计算的运算符。

位运算符会先将操作数变成二进制数,然后进行位运算,最后将计算结果从二进制变回十进制数。

MySQL中提供的位运算符有按位或(|)、按位与(&)、按位异或(^)、按位左移(<<)、按位右移(>>)和按位取反(~)