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
Name | Description |
---|---|
> | 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,区间判断,返回分段后的结果 |
IS | Test a value against a boolean,判断一个值是否是布尔值 |
IS NOT | Test a value against a boolean,判断一个值是否不是布尔值 |
IS NOT NULL | NOT NULL value test,判断一个值不是null |
IS NULL | NULL value test,判断一个值是null |
ISNULL() | Test whether the argument is NULL,测试参数是null |
LEAST() | Return the smallest argument,返回最小的参数 |
LIKE | Simple 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 LIKE | Negation 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。
Name | Description |
---|---|
AND , && | Logical AND |
NOT , ! | Negates value |
[`OR`, ` | |
XOR | Logical 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中提供的位运算符有按位或(|)、按位与(&)、按位异或(^)、按位左移(<<)、按位右移(>>)和按位取反(~)