三.运算符
1.算数运算符
在sql中,+没有连接的作用,只表示加法运算。此时,会将字符串转换为数值(隐式转换)
SELECT 100 + '1'
FROM DUAL;
#结果为101
SELECT 100 + 'a'('a'当0处理)
FROM DUAL;
#结果为100
SELECT 100 + 'NULL'
FROM DUAL;
#NULL参与运算,结果为NULL
#除法默认为浮点型,即使是两个整型相除
除法分母为0,结果为null
SELECT 100/2
FROM DUAL;
2.比较运算符
= 与 <=>(安全等于) 的区别
=:在比较null时,只要比较双方出现null,结果就为null。而并非0和1
<=>:在两个操作数都为null时,返回1,而不是null。当一个操作数为null时,返回0。可以说<=>就是为null而生
不等于:!= 或<>
在操作数有null时,建议写一行代码来测试为null还是为0为1的情况,无需死记硬背
例如:
SELECT 3<>2,3<>NULL,NULL != NULL
FROM DUAL;
运算符 | 名称 | 作用 | 示例 |
---|---|---|---|
IS NULL | 为空运算符 | 判断值、字符串或表达式是否为空 | SELECT B FROM TABLE WHERE A IS NULL |
IS NOTNULL | 不为空运算符 | 判断值、字符串或表达式是否不为空 | SELECT B FROM TABLE WHERE A IS NOT NULL |
LEAST | 最小值运算符 | 在多个值中返回最小值 | SELECT D FROM TABLE WHERE C LEAST(A, B) |
GREATEST | 最大值运算符 | 在多个值中返回最大值 | SELECT D FROM TABLE WHERE C GREATEST(A, B) |
BETWEEN … AND … | 两值之间的运算符 | 判断一个值是否在两个值之间(闭区间,下界写在前面,上届写在后面) | SELECT D FROM TABLE WHERE C BETWEEN A AND B |
ISNULL | 为空运算符 | 判断一个值、字符串或表达式是否为空 | SELECT B FROM TABLE WHERE A ISNULL |
IN | 属于运算符 | 判断一个值是否为列表中的任意一个值 | SELECT D FROM TABLE WHERE C IN(A, B) |
NOT IN | 不属于运算符 | 判断一个值是否不是一个列表中的任意一个值 | SELECT D FROM TABLE WHERE C NOT IN(A, B) |
LIKE | 模糊匹配运算符 | 判断一个值是否符合模糊匹配规则 | SELECT C FROM TABLE WHERE A LIKE B |
REGEXP | 正则表达式运算符 | 判断一个值是否符合正则表达式的规则 | SELECT C FROM TABLE WHERE A REGEXPB |
RLIKE | 正则表达式运算符 | 判断一个值是否符合正则表达式的规则 | SELECT C FROM TABLE WHERE A RLIKEB |
LIKE使用明细
%:表示不确定字符的个数
SELECT last_name
FROM employees
WHERE last_name LIKE '%a%';
#查询第二个字符为a的员工姓名
_代表一个不确定字符
SELECT last_name
FROM employees
WHERE last_name LIKE '_a%';
特殊情况:如果员工姓名第二位为下划线,那么则需要用到转义字符\
SELECT last_name
FROM employees
WHERE last_name LIKE '_\_a%';
3.逻辑运算符
运算符 | 作用 | 示例 |
---|---|---|
NOT 或 ! | 逻辑非 | SELECT NOT A |
AND 或 && | 逻辑与 | SELECT A AND B |
OR 或 || | 逻辑或 | SELECT A OR B |
XOR | 逻辑异或 | SELECT A XOR B |
注意:OR可以和AND一起使用,但是在使用时要注意两者的优先级,由于AND的优先级高于OR,因此先对AND两边的操作数进行操作,再与OR中的操作数结合。
异或操作:简单理解就是两边不能同时满足
4.位运算符
运算符 | 作用 | 示例 |
---|---|---|
& | 按位与(位AND) | SELECT A & B |
| | 按位或(位OR) | SELECT A | B |
^ | 按位异或(为XOR) | SELECT A ^ B |
~ | 按位取反 | SELECT ~A |
>> | 按位右移 | SELECT A >> 2 |
<< | 按位左移 | SELECT B << 2 |