运算符是用来连接表达式中各个操作数的符号,其作用是用来指明对操作数所进行的运算。MySQL运算符包括四类,分别是算术运算符、比较运算符、逻辑运算符和位运算符。
算术运算符:包括加、减、乘、除、求余这集中算术运算符。
比较运算符:包括大于、小于、等于、不等于、为空等比较运算符。主要用于数值的比较、字符串的匹配等方面,尤其值得注意的是LIKE、IN、BETWEEN AND、IS NULL等都是比较运算符,还有用于使用正则表达式的REGEXP也是比较运算符。
逻辑运算符:包括与、或、非、异或等逻辑运算。
位运算符:包括按位与、按位或、按位取反、按位异或、按位左移和按位右移等位运算。
SELECT a ,a+5+2, a-5-2, a*5*2 FROM t1;
运行结果:
a | a+5+2 | a-5-2 | a*5*2 |
---|---|---|---|
24 | 31 | 17 | 240 |
SELECT a ,a/3, a DIV 3, a%3,MOD(a,3) FROM t1;
运行结果:
a | a/3 | a DIV 3 | a%3 | MOD(a,3) |
---|---|---|---|---|
24 | 8.0000 | 8 | 0 | 0 |
SELECT 5/0, 5 DIV 0,5%0 ,MOD(5,0);
运行结果:
5/0 | 5 DIV 0 | 5%0 | MOD(5,0) |
---|---|---|---|
NULL | NULL | NULL | NULL |
空值(NULL)不能使用“=”来判断
SELECT a ,a=24,a=20 FROM t1;
SELECT 'b'='b','b'='c',NULL=NULL;
这两个符号也不能用来判断空值(NULL)
SELECT a,a<>23,a!=23,a!=24,a!=NULL FROM t1;
SELECT 'b'<>'b','b'!='c';
“<=>”的作用与“=”是一样的,这个符号可以用来判断空值(NULL)。
这些运算符都不能用来判断空值(NULL)
判断操作数是否为空值(NULL),IS NOT NULL刚好和IS NULL相反。
SELECT a ,a IS NULL,a IS NOT NULL FROM t1;
运行结果:
a | a IS NULL | a IS NOT NULL |
---|---|---|
24 | 0 | 1 |
SELECT a, a BETWEEN 24 AND 26 FROM t1;
运行结果:
a | a BETWEEN 24 AND 26 |
---|---|
24 | 1 |
“IN”用来判断操作数是否落在某个集合中。
SELECT s,s LIKE 'beijing',s LIKE '___jing',s LIKE 'b%',s LIKE 's%'FROM t2;
运行结果:
s | s LIKE ‘beijing’ | s LIKE ‘___jing’ | s LIKE ‘b%’ | s LIKE ‘s%’ |
---|---|---|---|---|
beijing | 1 | 1 | 1 | 0 |
逻辑运算符用来判断表达式的真假。逻辑运算符的返回结果只有1和0。逻辑运算符又称为布尔运算符。MySQL中支持四种逻辑运算符。这四种逻辑运算符分别是与、或、非和异或。
“&&”或者AND表示与运算。
SELECT -1&&2&&3, 0&&3, 0&&NULL, 3&&NULL;
-1&&2&&3 | 0&&3 | 0&&NULL | 3&&NULL |
---|---|---|---|
1 | 0 | 0 | NULL |
“||”或则会OR表示或运算。
SELECT -1||1||NULL||0, 3||NULL,0||NULL,NULL||NULL,0||0;
-1||1||NULL||0 | 3||NULL | 0||NULL | NULL||NULL | 0||0 |
---|---|---|---|---|
1 | 1 | NULL | NULL | 0 |
“!”或者NOT表示非运算。
SELECT !1,!0.3,!-3,!NULL,!0;
!1 | !0.3 | !-3 | !NULL | !0 |
---|---|---|---|---|
0 | 0 | 0 | NULL | 1 |
XOR表示异或运算。只要其中任何一个操作数为NULL时,结果返回NULL;如果都是非0的数字或者都是0时,结果返回0;如果有一个是非0,另一个是0时,结果返回1。
SELECT NULL XOR 1, NULL XOR 0,3 XOR 1, 1 XOR 0,0 XOR 0,3 XOR 2 XOR 0 XOR 1;
NULL XOR 1 | NULL XOR 0 | 3 XOR 1 | 1 XOR 0 | 0 XOR 0 | 3 XOR 2 XOR 0 XOR 1 |
---|---|---|---|---|---|
NULL | NULL | 0 | 1 | 0 | 1 |
位运算符是在二进制数上进行计算的运算符。位运算会先将操作数变成二进制数,然后进行位运算。然后再将计算结果从二进制数变回十进制数。MySQL支持六种位运算符,分别是按位与、按位或、按位取反、按位异或、按位左移和按位右移。
符号 | 名称 |
---|---|
& | 按位与 |
| | 按位或 |
~ | 按位取反 |
^ | 按位异或 |
<< | 按位左移 |
>> | 按位右移 |
“&”表示按位与,进行该运算时,数据库系统会先将十进制的数转换为二进制的数,然后对应操作数的每个二进制位上进行与运算。运算完成后再将二进制变回十进制数。
SELECT 5&6,5&6&7;
运行结果:
5&6 | 5&6&7 |
---|---|
4 | 4 |
“|”表示按位或,将操作数化为二进制后。每位都进行或运算。
SELECT 5|6,5|6|7;
运行结果:
5 | 6 | 5 | 6 | 7 |
---|---|---|---|---|
7 | 7 |
SELECT ~1;
运行结果:
~1 |
---|
18446744073709551614 |
“<<”表示按位左移。“m<
SELECT 5<<2,5>>2;
运行结果:
5<<2 | 5>>2 |
---|---|
20 | 1 |
由于在实际应用中可能需要同时使用多个运算符。这就必须考虑运算符的运算顺序。MySQL的表达式都是从左到右开始运算,那个运算符的优先级高,哪个运算符先进行计算。
优先级 | 运算符 |
---|---|
1(最高) | ! |
2 | -(负号),~(按位取反) |
3 | ^(按位异或) |
4 | *,/(DIV),%(MOD) |
5 | +,- |
6 | >>,<< |
7 | & |
8 | | |
9 | =(比较运算),<=>,<,<=,>,>=,!=,<>,IN,IS NULL,LIKE,REGEXP |
10 | BETWEEN AND,CASE,WHEN,THEN,ELSE |
11 | NOT |
12 | &&,AND |
13 | XOR |
14 | ||,OR |
15(最低) | =(赋值运算),:= |
我们可以看出,不同运算符的优先级是不同的。在无法确定优先级的情况下,可以使用圆括号()来改变优先级,并且这样会使计算过程更加清晰。