一、MySQL算术运算符
运算符 | 作用 |
---|---|
+ | 加法运算 |
- | 减法运算 |
* | 乘法运算 |
/ | 除法运算,返回商 |
% | 求余运算,返回余数 |
举例:
mysql> create table tmp14 (num int);
Query OK, 0 rows affected (0.01 sec)
mysql> insert into tmp14 value(64);
Query OK, 1 row affected (0.01 sec)
mysql> select num, num+10,num-3,num*3,num/3,num%3 from tmp14;
+------+--------+-------+-------+---------+-------+
| num | num+10 | num-3 | num*3 | num/3 | num%3 |
+------+--------+-------+-------+---------+-------+
| 64 | 74 | 61 | 192 | 21.3333 | 1 |
+------+--------+-------+-------+---------+-------+
1 row in set (0.00 sec)
运算符 | 作用 |
---|---|
= | 等于 |
<=> | 安全的等于 |
<> | 不等于,可以写成 != |
<= | 小于等于 |
>= | 大于等于 |
> | 大于 |
< | 小于 |
> | 大于 |
is null | 判断一个值是否为null |
is not null | 判断一个值是否不为null |
least | 当有两个或多个参数时,返回最小值 |
greatest | 当有两个或多个参数时,返回最大值 |
between and | 判断一个值是否落在两个值之间 |
isnull | 与 IS NULL 作用相同但语法不相同 |
in | 判断一个值是否是 IN 列表中的任意一个值 |
not in | 判断一个值是否不是 IN 列表中的任意一个值 |
like | 通配符匹配 |
regexp | 正则表达式匹配 |
1、等于运算符(=)
等于运算符用来判断数字、字符串、表达式是否相等,相等则返回值为1,不相等返回值为0,如果有一个值是 NULL ,则比较结果为 NULL
举例:
mysql> select 1=0,'2'=2,(1+3)=(2+2),null=null;
+-----+-------+-------------+-----------+
| 1=0 | '2'=2 | (1+3)=(2+2) | null=null |
+-----+-------+-------------+-----------+
| 0 | 1 | 1 | NULL |
+-----+-------+-------------+-----------+
1 row in set (0.00 sec)
2、安全等于运算符 ( <=> )
这个操作符和等于运算符(=)的作用一致,只不过多了一个功能,就是可以判断 NULL 值。
举例:
mysql> select 1<=>0,'2'<=>2,(1+3)<=>(2+2),null<=>null;
+-------+---------+---------------+-------------+
| 1<=>0 | '2'<=>2 | (1+3)<=>(2+2) | null<=>null |
+-------+---------+---------------+-------------+
| 0 | 1 | 1 | 1 |
+-------+---------+---------------+-------------+
1 row in set (0.00 sec)
3、不等于运算符 ( <> 或 != )
不等于运算符用于判断数字、字符串、表达式是否不相等,不等于返回1,等于返回0 ,但是不能判断NULL 值
举例:
mysql> select 'good'<>'god',1<>2,4!=4,5.5!=5,null<>null;
+---------------+------+------+--------+------------+
| 'good'<>'god' | 1<>2 | 4!=4 | 5.5!=5 | null<>null |
+---------------+------+------+--------+------------+
| 1 | 1 | 0 | 1 | NULL |
+---------------+------+------+--------+------------+
1 row in set (0.00 sec)
4、IS NULL 、ISNULL 、IS NOT NULL
- IS NULL 和 ISNULL 检验一个值是否为 NULL ,如果为 NULL ,返回值为 1,否则返回值为 0
- IS NOT NULL 检验一个值是否不为 NULL ,如果不为 NULL ,返回值为 1,否则返回值为 0
举例:
//IS NULL
mysql> select null is null;
+--------------+
| null is null |
+--------------+
| 1 |
+--------------+
1 row in set (0.00 sec)
//ISNULL(与IS NULL的语法不一致,效果相同)
mysql> select isnull(null),isnull(20);
+--------------+------------+
| isnull(null) | isnull(20) |
+--------------+------------+
| 1 | 0 |
+--------------+------------+
1 row in set (0.00 sec)
//IS NOT NULL
mysql> select null is not null,20 is not null;
+------------------+----------------+
| null is not null | 20 is not null |
+------------------+----------------+
| 0 | 1 |
+------------------+----------------+
1 row in set (0.00 sec)
5、BETWEEN AND
用于判断一个值是否落在两个值之间
举例:
解释:4是否在2和5之间 4是否存在4和6之间 12是否存在9和10之间
mysql> select 4 between 2 and 5,4 between 4 and 6, 12 between 9 and 10;
+-------------------+-------------------+---------------------+
| 4 between 2 and 5 | 4 between 4 and 6 | 12 between 9 and 10 |
+-------------------+-------------------+---------------------+
| 1 | 1 | 0 |
+-------------------+-------------------+---------------------+
1 row in set (0.00 sec)
6、LEAST 、GREATEST
- LEAST :当有两个或多个参数时,返回最小值,如果有一个值是 NULL ,则返回结果为 NULL
- GREATEST :当有两个或多个参数时,返回最大值,如果有一个值是 NULL ,则返回结果为 NULL
举例:
least(返回最小值)
mysql> select least(2,0),least('a','c','b'),least(10,null);
+------------+--------------------+----------------+
| least(2,0) | least('a','c','b') | least(10,null) |
+------------+--------------------+----------------+
| 0 | a | NULL |
+------------+--------------------+----------------+
1 row in set (0.00 sec)
greatest(返回最大值)
mysql> select greatest(2,0),greatest('a','b','c','d','f');
+---------------+-------------------------------+
| greatest(2,0) | greatest('a','b','c','d','f') |
+---------------+-------------------------------+
| 2 | f |
+---------------+-------------------------------+
1 row in set (0.00 sec)
7、IN 、NOT IN
- IN :判断一个值是否是 IN 列表中的任意一个值
- NOT IN :判断一个值是否不是 IN 列表中的任意一个值
举例:
IN
mysql> select 2 in (1,3,4,5), 2 in (1,2);
+----------------+------------+
| 2 in (1,3,4,5) | 2 in (1,2) |
+----------------+------------+
| 0 | 1 |
+----------------+------------+
1 row in set (0.00 sec)
NOT IN
mysql> select 2 not in(1,2,3), 2 not in(1,3);
+-----------------+---------------+
| 2 not in(1,2,3) | 2 not in(1,3) |
+-----------------+---------------+
| 0 | 1 |
+-----------------+---------------+
1 row in set (0.00 sec)
8、LIKE
- LIKE 运算符用来匹配字符串,如果匹配则返回 1,如果不匹配则返回 0
- LIKE 使用两种通配符:’%’ 用于匹配任何数目的字符,包括零字符 ; ‘_’ 只能匹配一个字符
举例:
mysql> select 'abcdefg' like 'abcdef_', 'abcdefg' like 'abcde__', 'abcdefg' like '%g';
+--------------------------+--------------------------+---------------------+
| 'abcdefg' like 'abcdef_' | 'abcdefg' like 'abcde__' | 'abcdefg' like '%g' |
+--------------------------+--------------------------+---------------------+
| 1 | 1 | 1 |
+--------------------------+--------------------------+---------------------+
1 row in set (0.00 sec)
9、REGEXP
- REGEXP 运算符用来匹配字符串,如果匹配则返回 1,如果不匹配则返回 0
- REGEXP 使用几种通配符:
- ‘^’ 用于匹配以什么开头的字符串
- ‘$’ 用于匹配以什么结尾的字符串
- ‘.’ 用于匹配任何一个单字符串
- '[…]'用于匹配在方括号内的任何字符
- ‘*’ 用于匹配零个或多个在它前面的字符
举例:
mysql> mysql> select 'ssky' regexp '^s', 'ssky' regexp 'y$', 'ssky' regexp '.sky','ssky' regexp '[ab]';
+--------------------+--------------------+----------------------+----------------------+
| 'ssky' regexp '^s' | 'ssky' regexp 'y$' | 'ssky' regexp '.sky' | 'ssky' regexp '[ab]' |
+--------------------+--------------------+----------------------+----------------------+
| 1 | 1 | 1 | 0 |
+--------------------+--------------------+----------------------+----------------------+
1 row in set (0.00 sec)
二、MySQL逻辑运算符
运算符 | 作用 |
---|---|
not或! | 逻辑非 |
and或&& | 逻辑与 |
or或 || | 逻辑或 |
xor | 逻辑异或 |
1、逻辑非(not或!)
- 当操作数为0时,所得值为1
- 当操作数为非0时,所得值为0
- 当操作数为null时,所得值为null
举例:
mysql> select not 10,!10,not(1-1),!(1-1),not 1+1,not null;
+--------+-----+----------+--------+---------+----------+
| not 10 | !10 | not(1-1) | !(1-1) | not 1+1 | not null |
+--------+-----+----------+--------+---------+----------+
| 0 | 0 | 1 | 1 | 0 | NULL |
+--------+-----+----------+--------+---------+----------+
1 row in set (0.00 sec)
2、逻辑与 ( AND 或 && )有假则为假
- 当所有操作数均为非零值、并且不为 NULL 时,所得值为 1
- 当一个或多个操作数为 0 时,所得值为 0
- 其余情况所得值为 NULL
举例:
mysql> select 1 and -1, 1 && 0 , 0 and null, 1 && null;
+----------+-------+------------+-----------+
| 1 and -1 | 1 && 0 | 0 and null | 1 && null |
+----------+-------+------------+-----------+
| 1 | 0 | 0 | NULL |
+----------+-------+------------+-----------+
1 row in set (0.00 sec)
3、逻辑或 ( OR 或 || )
- 当两个操作数均为非 NULL 值,且任意一个操作数为非零值时,结果为 1 ,否则为 0
- 当有一个操作数为 NULL ,且另一个操作数为非零值时,则结果为 1 ,否则结果为 NULL
- 当两个操作数均为 NULL 时,则所得结果为 NULL
举例:
mysql> select 1 or -1 or 0,1 || 2,0 or null,null || null;
+--------------+--------+-----------+--------------+
| 1 or -1 or 0 | 1 || 2 | 0 or null | null || null |
+--------------+--------+-----------+--------------+
| 1 | 1 | NULL | NULL |
+--------------+--------+-----------+--------------+
4、逻辑异或 ( XOR )
- a XOR b 的计算等同于 ( a AND (NOT b) ) 或 ( (NOT a) AND b )
- 当任意一个操作数为 NULL 时,返回值为 NULL
- 对于非 NULL 的操作数,如果两个操作数都是非 0 值或者都是 0 值,则返回结果为 0
如果一个为 0 值,另一个为非 0 值,返回结果为 1
举例:
mysql> select 1 xor 1, 0 xor 0, 1 xor 0,1 xor null, 1 xor 1 xor 1;
+---------+---------+---------+------------+---------------+
| 1 xor 1 | 0 xor 0 | 1 xor 0 | 1 xor null | 1 xor 1 xor 1 |
+---------+---------+---------+------------+---------------+
| 0 | 0 | 1 | NULL | 1 |
+---------+---------+---------+------------+---------------+
1 row in set (0.00 sec)
三、位运算符
运算符 | 作用 |
---|---|
| | 位或 |
& | 位与 |
^ | 位异或 |
<< | 位左移 |
>> | 位右移 |
~ | 位取反 |
1、位或运算符 ( | ) 有1为1 无1无0
对应的二进制位有一个或两个为 1 ,则该位的运算结果为 1 ,否则为 0
mysql> select 10 | 15 ,9|4|2;
+---------+-------+
| 10 | 15 | 9|4|2 | # 10的二进制为1010,15的二进制为1111,按位或运算之后结果为
+---------+-------+
| 15 | 15 | # 9的二进制为1001,4为0100,2的二进制为0010,按位或运算之后
+---------+-------+
1 row in set (0.00 sec)
2、位与运算符 ( & )
对应的二进制位都为 1 ,则该位的运算结果为 1 ,否则为 0
mysql> select 10 & 15 , 9 & 4 & 2;
+---------+-----------+
| 10 & 15 | 9 & 4 & 2 | #10的二进制为1010,15的为1101二进制都为1则为1
+---------+-----------+最后结果是1000,也就是10
| 10 | 0 |
+---------+-----------+
1 row in set (0.00 sec)
3、位异或运算符 ( ^ )
对应的二进制位不相同时,结果为 1 ,否则为 0
mysql> select 10 ^ 15 ,1 ^ 0,1 ^ 1;
+---------+-------+-------+
| 10 ^ 15 | 1 ^ 0 | 1 ^ 1 |
+---------+-------+-------+
| 5 | 1 | 0 |
+---------+-------+-------+
1 row in set (0.00 sec)
4、位左移运算符 ( << )
使指定的二进制位都左移指定的位数,左移指定位之后,左边高位的数值将被移出并丢弃,右边低位空出的位置用 0 补齐
mysql> select 1<<2 ,4<<2;
+------+------+
| 1<<2 | 4<<2 | # 1的二进制值为00000001,左移两位之后变成00000100,即十进制数4
+------+------+ # 4的二进制值为00000100,左移两位之后变成00010000,即十进制数16
| 4 | 16 |
+------+------+
1 row in set (0.00 sec)
5、位右移运算符 ( >> )
使指定的二进制位都右移指定的位数,右移指定位之后,右边低位的数值将被移出并丢弃,左边高位空出的职位用 0 补齐
mysql> select 1>>1 ,16>>2;
+------+-------+
| 1>>1 | 16>>2 |
+------+-------+
| 0 | 4 |
+------+-------+
1 row in set (0.00 sec)
6、位取反运算符 ( ~ )
将对应的二进制数逐位反转,即 1 取反后变 0 , 0 取反后变 1
mysql> select 5 & ~1;
+--------+
| 5 & ~1 |
+--------+
| 4 |
+--------+
1 row in set (0.00 sec)
四、优先级
最低
=(赋值运算) || or
XOR
&& AND
NOT
BETWEEN
=(比较运算) , <=>, >=, <>, <=, < > , != ,IS, LIKE, IN ,REGEXP
|
&
<<>>
- +
* /%
-(负号) ~(位取反)
!