运算符连接表达式中的各个操作数,用来指明对操作数所进行的运算,让我们可以更加灵活的使用表中的数据。
常见的运算符有:
- 算术运算符
- 比较运算符
- 逻辑运算符
- 位运算符
算术运算符
算术运算符是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 | =(赋值运算)、:= |
2 | II、OR |
3 | XOR |
4 | &&、AND |
5 | NOT |
6 | BETWEEN、CASE、WHEN、THEN、ELSE |
7 | =(比较运算)、<=>、>=、>、<=、<、<>、!=、 IS、LIKE、REGEXP、IN |
8 | | |
9 | & |
10 | <<、>> |
11 | -(减号)、+ |
12 | *、/、% |
13 | ^ |
14 | -(负号)、?(位反转) |
15 | ! |
本站所有内容均为原创,本站保留所有权利。仅允许非商业用途的转载,但必须注明来源网站、作者、来源链接!否则,由此造成的一切后果,由转载方承担!
干货分享、技术提升、面试笔试、学习交流,欢迎关注公众号:xuesql。QQ学习交流群:209942678。