MYSQL|MYSQL 运算符总结
目录
- 1、算数运算符
- 2、比较运算符
- 3、逻辑运算符
- 4、位运算符
- 5、运算符的优先级
1、算数运算符 MySQL支持的算术运算符:
运算符 | 作用 |
+ | 加法 |
- | 减法 |
* | 乘法 |
/,DIV | 除法,返回商 |
%,MOD | 除法,返回余数 |
例1: +,-,*,/,%,
mysql> select 0.1+0.333,0.1-0.333,0.1*0.333,1/2,1%2; +-----------+-----------+-----------+--------+------+| 0.1+0.333 | 0.1-0.333 | 0.1*0.333 | 1/2| 1%2|+-----------+-----------+-----------+--------+------+|0.433 |-0.233 |0.0333 | 0.5000 |1 |+-----------+-----------+-----------+--------+------+1 row in set (0.05 sec)
例2:除法运算中,如果除数为
0
将是返回NULL
mysql> select 1/0; +------+| 1/0|+------+| NULL |+------+1 row in set (0.00 sec)
例3:模运算的另外一种形式
MOD
(a,b) 和a%b
相同mysql> select 1%2,mod(1,2); +------+----------+| 1%2| mod(1,2) |+------+----------+|1 |1 |+------+----------+1 row in set (0.00 sec)
2、比较运算符 MySQL支持的比较运算符:
运算符 | 作用 |
= | 等于 |
<>或!= | 不等于 |
<=> | NULL 安全的等于(NULL-safe) |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
BETWEEN | 存在与指定范围 |
IN | 存在于指定集合 |
IS NULL | 为 NULL |
IS NOT NULL | 不为 NULL |
LIKE | 通配符匹配 |
REGEXP 或 RLIKE | 正则表达式匹配 |
<>
” 和 “=
” 相反,如果两则操作不等 返回结果为1,否则返回结果0,“NULL
”不能用于“<>
”比较mysql> select 1<>0,1<>1,null<>null; +------+------+------------+| 1<>0 | 1<>1 | null<>null |+------+------+------------+|1 |0 |NULL |+------+------+------------+1 row in set (0.00 sec)
例2: “
<=>
”安全等于运算符和“=
”操作相同返回1,区别在于“<=>
”在值为null
的时候也可以做比较mysql> select 1<=>1,1<=>0,null<=>null; +-------+-------+-------------+| 1<=>1 | 1<=>0 | null<=>null |+-------+-------+-------------+|1 |0 |1 |+-------+-------+-------------+1 row in set (0.02 sec)
例3: “
<
”当左侧小于右侧时,返回1mysql> select 'a'<'b','A'<'b','bdf'<'c',1<2; +---------+---------+-----------+-----+| 'a'<'b' | 'A'<'b' | 'bdf'<'c' | 1<2 |+---------+---------+-----------+-----+|1 |1 |1 |1 |+---------+---------+-----------+-----+1 row in set (0.02 sec)
例4:
between
,格式为“a BETWEEN min AND max
”,表示a大于等于min
并且小于等于max
的时候,返回1,否则返回0mysql> select 10 between 10 and 20,9 between 10 and 20; +----------------------+---------------------+| 10 between 10 and 20 | 9 between 10 and 20 |+----------------------+---------------------+|1 |0 |+----------------------+---------------------+1 row in set (0.01 sec)
例5:
regexp
,格式为“str REGEXP str_pat
”,表示str字符串中含有str_pat
相匹配的字符串时,则返回1,否则返回0mysql> select 'abcdeef' regexp 'ab','abcdef' regexp 'g','abcedf' regexp 'df'; +-----------------------+---------------------+----------------------+| 'abcdeef' regexp 'ab' | 'abcdef' regexp 'g' | 'abcedf' regexp 'df' |+-----------------------+---------------------+----------------------+|1 |0 |1 |+-----------------------+---------------------+----------------------+1 row in set (0.01 sec)
其他的使用简单,直接上语法,示例就不写了
in
,使用格式为“a IN (value1,value2,…)
”IS NULL
,使用格式为“a IS NULL
”IS NOT NULL
,使用格式为“a IS NOT NULL
”LIKE
,使用格式为“a LIKE %123%
”
3、逻辑运算符 MySQL中的逻辑运算符:
运算符 | 作用 |
NOT 或! | 逻辑非 |
AND 或&& | 逻辑与 |
OR 或 || | 逻辑或 |
XOR | 逻辑异或 |
NOT
”或“!
”表示逻辑非。返回和操作数相反的结果。当操作为0,则返回1;当操作为1,则返回0,但是NOT NLLL
返回null
mysql> select not 0,!0,not 1,not null; +-------+----+-------+----------+| not 0 | !0 | not 1 | not null |+-------+----+-------+----------+|1 |1 |0 |NULL |+-------+----+-------+----------+1 row in set (0.00 sec)
例2: “
AND
”和“&&
”表示逻辑与运算,当操作数均为非零值,返回结果1,否则返回0,当操作数中有任意一个为NULL,其中一个值如果为0,返回0;其他值都是>0的数值,另外有NULL
,则返回NULL
mysql> select (1 and 1),(0 and 1),(3 and 1),(0 and null),(1 and null); +-----------+-----------+-----------+--------------+--------------+| (1 and 1) | (0 and 1) | (3 and 1) | (0 and null) | (1 and null) |+-----------+-----------+-----------+--------------+--------------+|1 |0 |1 |0 |NULL |+-----------+-----------+-----------+--------------+--------------+1 row in set (0.00 sec)mysql> select 1 and NULL and 0; +------------------+| 1 and NULL and 0 |+------------------+|0 |+------------------+1 row in set (0.00 sec)mysql> select 1 and NULL and 3; +------------------+| 1 and NULL and 3 |+------------------+|NULL |+------------------+1 row in set (0.00 sec)
例3: “
OR
”或“||
”表示逻辑或运算。当操作数均不为NULL时,任意一方非零,则结果为1,否则为0;当有一个操作数为NULL,如果另一个操作数非零,则结果为1,否则结果为NULLmysql> select (1 or 0),(0 or 0),(1 or NULL),(0 or NULL),(NULL or NULL); +----------+----------+-------------+-------------+----------------+| (1 or 0) | (0 or 0) | (1 or NULL) | (0 or NULL) | (NULL or NULL) |+----------+----------+-------------+-------------+----------------+|1 |0 |1 |NULL |NULL |+----------+----------+-------------+-------------+----------------+1 row in set (0.00 sec)
例4:
XOR
表示逻辑异或。当任意一个操作数为 NULL 时,返回值为 NULL。对于非 NULL 的操作数,如果两个的逻辑真假值相异,则返回结果 1;否则返回 0。mysql> select (0 xor 0),(1 xor 0),(1 xor 1),(1 xor null),(0 xor null),(null xor null); +-----------+-----------+-----------+--------------+--------------+-----------------+| (0 xor 0) | (1 xor 0) | (1 xor 1) | (1 xor null) | (0 xor null) | (null xor null) |+-----------+-----------+-----------+--------------+--------------+-----------------+|0 |1 |0 |NULL |NULL |NULL |+-----------+-----------+-----------+--------------+--------------+-----------------+1 row in set (0.00 sec)
4、位运算符 MySQL支持的位运算符:
运算符 | 作用 |
& | 位与(位 AND) |
| | 位或 (位 OR ) |
^ | 位异或(位 XOR) |
~ | 位取反 |
>> | 位右移 |
<< | 位左移 |
mysql> select 2&3; +-----+| 2&3 |+-----+|2 |+-----+1 row in set (0.01 sec)
例2: “位或”对多个操作数的二进制位作逻辑或操作。2&3,2的二进制数为10,3的二进制数为11,将此做与操作,结果就变成11,转换为十进制结果就是3
mysql> select 2|3; +-----+| 2|3 |+-----+|3 |+-----+1 row in set (0.00 sec)
例3: “
位异或
”对多个操作数的二进制位作异或操作。2^3 ,2的二进制数为10,3的二进制数为11,10^11结果就是01,转换为十进制结果就是1mysql> select 2^3; +-----+| 2^3 |+-----+|1 |+-----+1 row in set (0.01 sec)
例4: “位取反”对操作数的二进制位做NOT操作,这里的操作数只能是一位,解释:在mysql中常亮数字默认会以8字节表示,8个字节就是64位,而常量1的二进制 就是前面63个0,1个1,位去反后就是63个1,1个0,转换为二进制后就是 18446744073709551614,
mysql> select ~1,~18446744073709551614-> ; +----------------------+-----------------------+| ~1| ~18446744073709551614 |+----------------------+-----------------------+| 18446744073709551614 |1 |+----------------------+-----------------------+1 row in set (0.01 sec)mysql> select bin(18446744073709551614); +------------------------------------------------------------------+| bin(18446744073709551614)|+------------------------------------------------------------------+| 1111111111111111111111111111111111111111111111111111111111111110 |+------------------------------------------------------------------+1 row in set (0.03 sec)
例5: “位右移”对左操作数向右移动操作数指定的位数。例如100>>3,对100的二进制数0001100100右移动3位,0000001100,转换为二进制数就是12:
mysql> select 100>>3; +--------+| 100>>3 |+--------+|12 |+--------+1 row in set (0.00 sec)
例6: “位左移”对左操作数向左移动操作数指定的位数。例如100<<3,对100的二进制数0001100100000右移动3位,1100100000000,转换为二进制数就是800:
mysql> select 100<<3; +--------+| 100<<3 |+--------+|800 |+--------+1 row in set (0.00 sec)
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 | ! |
推荐阅读
- Shell-Bash变量与运算符
- 7.9号工作总结~司硕
- 最有效的时间管理工具(赢效率手册和总结笔记)
- 数据库总结语句
- 周总结|周总结 感悟
- 周总结43
- 参加【21天写作挑战赛】,第七期第14天,挑战感受小总结
- py连接mysql
- 2019-01-18Mysql中主机名的问题
- 第二阶段day1总结