理解MySQL中的运算符
一、算数运算符即最基本的算术运算:加减乘除模
加
mysql> select 1+2;
减
mysql> select 2-1;
乘
mysql> select 2*3;
除
mysql> select 5/3;
商
mysql> SELECT 5 DIV 2;
模
mysql> select 5%2,mod(5,2);
| 运算符 | 作用 |
|---|---|
| + | 加法 |
| - | 减法 |
| * | 乘法 |
| / 或 DIV | 除法 |
| % 或 MOD | 取余 |
二、比较运算符
等于
mysql> select 1=0,1=1,null=null;
不等于
mysql> select 1<>0,1<>1,null<>null,1!=5;
安全等于(即使操作的值为null时也可以正确比较)
mysql> select 1<=>1,2<=>0,0<=>0,null<=>null;
小于
mysql> select 'a'<'b','a'<'a','a'<'c',1<2;
小于等于
mysql> select 'bdf'<='b','b'<='b',0<1;
大于
mysql> select 'a'>'b','abc'>'a',1>0;
大于等于
mysql> select 'a'>='b','abc'>='a',1>=0,1>=1;
BETWEEN(between a and b,等价于:a>=min and a<= max,当操作数据类型不同时,比较时会遵循类型转换原则进行转换后再进行比较运算)
mysql> select 10 between 10 and 20, 9 between 10 and 20;
IN
mysql> select 1 in (1,2,3), 't' in ('t','a','b','l','e'), 0 in (1,2);
IS NULL
mysql> select 0 is null,null is null;
IS NOT NULL
mysql> select 0 is not null, null is not null;
LIKE
mysql> select 123456 like '123%', 123456 like '%123%', 123456 like '%321%';
REGEXP
mysql> select 'abcdef' regexp 'ab', 'abcdefg' regexp 'k';
后面两个是字符匹配,关于它们的更多用法,请参考:MySQL中的模式匹配
| 运算符 | 作用 |
|---|---|
| = | 等于 |
| <> 或 ! | 不等于 |
| <==> | NULL安全的等于 |
| < | 小于 |
| <= | 小于等于 |
| > | 大于 |
| >= | 大于等于 |
| BETWEEN | 计算指定范围 |
| IN | 存在某集合 |
| IS NULL 和 IS NOT NULL | 是否为NULL |
三、逻辑运算符
非(not !)
mysql> select not 0, not 1, not null;
mysql> select ! 0, ! 1, ! null;
与(and &&)
mysql> select (1 and 1), (0 and 1), (3 and 1), (1 and null);
mysql> select (1 && 1), (0 && 1), (3 && 1), (1 && null);
或(or ||)
mysql> select (1 or 0), (0 or 0), (1 or null), (1 or 1), (null or null);
mysql> select (1 || 0), (0 || 0), (1 || null), (1 || 1), (null || null);
异或(xor)
mysql> select (1 xor 1), (0 xor 0), (1 xor 0), (0 xor 1), (null xor 1);
mysql> select (1 ^ 1), (0 ^ 0), (1 ^ 0), (0 ^ 1), (null ^ 1);
| 运算符号 | 作用 |
|---|---|
| NOT 或 ! | 逻辑非 |
| AND | 逻辑与 |
| OR | 逻辑或 |
| XOR | 逻辑异或 |
四、位运算符
位运算是将给定的操作数转化为二进制后,对各个操作数每一位都进行指定的逻辑运算,得到的二进制结果转换为十进制数后就是位运算的结果。
位与(&)
mysql> select 2&3;
mysql> select 2&3&4;
位或(|)
mysql> select 2|3;
位异或(^)
mysql> select 2^3;
位取反(~)
mysql> select ~1,~18446744073709551614;
在mysql中常量数字默认会以8个字节来表示,8个字节就是64位,常量1的二进制表示为63个'0'加1个'1',取后后即63个'1'加一个'0'。
位右移(>>)
mysql> select 100>>3;
位左移(<<)
mysql> select 100<<3;
| 运算符号 | 作用 |
|---|---|
| & | 按位与 |
| | | 按位或 |
| ^ | 按位异或 |
| ! | 取反 |
| << | 左移 |
| >> | 右移 |
五、运算符优先级顺序
从高到低
:=
||, OR, XOR
&&, AND
BETWEEN, CASE, WHEN, THEN, ELSE
=, <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN
|
&
<<, >>
-, +
*, /, DIV, %, MOD
^
- (unary minus), ~ (unary bit inversion)
!, NOT
BINARY, COLLATE
六、其他运算符
| 运算符 | 作用 |
|---|---|
| LIKE | 进行模糊匹配 |
| REGEXP 或 RLIKE | 进行正则匹配 |