运算符连接表达式中的各个操作数,用来指明对操作数所进行的运算,让我们可以更加灵活的使用表中的数据。

常见的运算符有:

  • 算术运算符
  • 比较运算符
  • 逻辑运算符
  • 位运算符

算术运算符

算术运算符是SQL中最基本的运算符,用于各类数值运算。

运算符作用示例
+加法运算为所有男同学都加10分:
select score + 10 from student
where gender = ‘男’;
减法运算为所有男同学都减10分:
select score – 10 from student
where gender = ‘男’;
*乘法运算所有男同学分数都乘2:
select score * 2 from student
where gender = ‘男’;
/除法运算,返回商所有男同学分数都除2:
select score / 2 from student
where gender = ‘男’;
%,MOD求余运算,返回余数查询所有人的分数对5取余的余数:
select score % 5,mod(score,5) from student
where gender = ‘男’;

比较运算符

比较运算符主要用于比较运算。

运算符作用示例
=等于。null = null返回假所有男同学:
select * from student
where gender = ‘男’;
<=>安全的等于。null <=> null返回真性别为null的同学:
select * from student
where gender <=> null;
<> 或者 !=不等于性别不为男的同学:
select * from student
where gender <> ‘男’;
<=小于等于分数小于等于60的同学:
select * from student
where score <=60;
<小于分数小于60的同学:
select * from student
where score <60;
>=大于等于分数大于等于60的同学:
select * from student
where score >=60;
>大于分数大于60的同学:
select * from student
where score >60;
IS NULL判断一个值是否为NULL性别为null的同学:
select * from student
where gender is null;
IS NOT NULL判断一个值是否不为NULL性别不为null的同学:
select * from student
where gender is not null;
BETWEEN AND判断一个值是否落在两个值之间分数大于等于60且小于等于80的同学:
select * from student
where score between 60 and 80;
IN判断一个值在列表内分数为60、70、80分的同学:
select * from student
where score in (60,70,80);
NOT IN判断一个值不在列表内分数不为60、70、80分的同学:
select * from student
where score not in (60,70,80);

默认情况下,英文字母的比较是不区分大小写的。比如,’a’=’A’是成立的。如果在比较时,需要区分大小写,可以在表达式前加binary关键字。比如,binary ‘a’=’A’是不成立的。

对于字符类型的值的比较,是按照字符的ASCII值的大小进行比较的。比如,’a’的ASCII值为97,’b’的ASCII值为98,所以’a'<‘b’;’a’的ASCII值为97,’A’的ASCII值为65,所以在进行二进制比较时’a’>’A’;’a’的ASCII值为97,’9’的ASCII值为57,所以’a’>’9’;

对于字符串(多个字符连在一起组成字符串 )的比较,是从左到右依次比较的。如果第一位字符相同,就比较第二位字符;如果第二位字符也相同,就比较第三位字符,直到比较出结果或者所有字符都参与了比较。比如,’abc’>’ab’,’abcef'<‘abd’,’123′<‘9’;

逻辑运算符

逻辑运算符主要用于逻辑运算。

运算符作用示例
NOT 或者 !逻辑非分数不大于60的同学:
select * from student
where not score > 60;
AND 或者 &&逻辑与分数大于60的男同学:
select * from student
where score > 60
and gender = ‘男’;
OR 或者 ||逻辑或分数大于60或性别为男的同学:
select * from student
where score > 60
or gender = ‘男’;
XOR逻辑异或分数大于60、性别为男有且只有一个条件满足的同学:
select * from student
where score > 60
xor gender = ‘男’;

位运算符

位运算符主要用于二进制位运算。

运算符作用示例
|按位或5 | 8 返回13
&按位与5 & 8 返回0
^按位异或5 ^ 8 返回13
~按位取反~5 返回18446744073709551610
<<按位左移5 << 2,表示整数 5 按位左移 2 位,返回20
>>按位右移5 >> 2,表示整数 5 按位右移 2 位,返回1

运算符的优先级

当一个表达式中使用了多个运算符时,根据运算符的优先级进行先后计算。有括号的,括号内部优先计算。其余部分,优先级相同的,按从左到右的顺序依次计算。不过有多个运算符容易引起歧义的地方,建议使用括号()来明确计算的优先级。

优先级由低到高排列运算符
1=(赋值运算)、:=
2II、OR
3XOR
4&&、AND
5NOT
6BETWEEN、CASE、WHEN、THEN、ELSE
7=(比较运算)、<=>、>=、>、<=、<、<>、!=、 IS、LIKE、REGEXP、IN
8|
9&
10<<、>>
11-(减号)、+
12*、/、%
13^
14-(负号)、?(位反转)
15!
picture loss