常用运算符
+、-、*、/
加减 |+、-|隐式运算
SELECT 100+'1' FROM DUAL;
SELECT 100+'a' FROM DUAL;
SELECT 100+null FROM DUAL;
结果分别为:101、100、null
当数字放在单引号之内做加减乘除的时候会出发隐式运算,所以结果是101,但是'a'不是一个数字,无法做转换
乘除 |*、/| 除法默认带小数点
SELECT 100,100*1,100*1.0,100/1.0,100/2,100+2*5/2,100/3,100 DIV 0 FROM DUAL;
SQL做除法默认带小数位
取模运算 | 结果仅与被模数有关
SELECT 12%3,12%5,12 MOD -5,-12%5,-12%-5 FROM DUAL;
若是a % b,则结果是正还是负数与a有关,与b无关
运算符
比较运算符
字符串与字符之间做比较,那么也会触发隐式转换。
| 运算符 | 内容 | 运算符 | 内容 |
|---|---|---|---|
= | 等于 | <=> | 安全等于 |
!= | 不等于 | <> | 不等于 |
< | 小于 | <= | 小于等于 |
> | 大于 | >= | 大于等于 |
SELECT 1=2,1!=2,1<=>2,1<>2,1='1',1='a',0='a' FROM DUAL;
结果:0 1 0 1 1 0 1
SELECT 'a'='a','ab'='ab','a'='b' FROM DUAL;
结果:1 1 0
select 1=NULL,NULL=NULL from DUAL;
结果:
nullnull
SELECT * FROM employees WHERE id=null;
❌ 错误的写法 ❌
SELECT * FROM employees WHERE id<=>null;
✅ 正确的写法 ✅ 使用安全等于<=> ✅
关键字
| 运 算 符 | 名 称 | 作 用 | 示 例 |
|---|---|---|---|
| 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 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 REGEXP B |
| RLIKE | 正则表达式运算符 | 判断一个值是否符合正则表达式的规则 | SELECT C FROM TABLE WHERE A RLIKE B |
IS NULL
SELECT * FROM employees WHERE ISNULL(id) AND name IS NOT NULL;
SELECT * FROM employees WHERE id IS NULL AND name IS NOT NULL;
SELECT * FROM employees WHERE id <=> NULL AND name IS NOT NULL;
LEAST / GREATEST
SELECT LEAST('A','B','C','D','E'),GREATEST('A','B','C','D','E');
# ↑ A E
SELECT LEAST(id,name) FROM employees;
BETWEEN AND
BETWEEN 0 AND 5的范围是[0,5] 而非 [0,5)或者其他。
SELECT id FROM employees WHERE id BETWEEN 1002 AND 1003;
SELECT id FROM employees WHERE id >= 1002 AND ID <=1003;
IN
SELECT id FROM employees WHERE id IN(1002,1003);
SELECT id FROM employees WHERE id = 1002 OR id = 1003;
NOT IN
SELECT id FROM employees WHERE id NOT IN(1002,1003);
SELECT id FROM employees WHERE id != 1002 OR id != 1003;
SELECT id FROM employees WHERE NOT id = 1002 OR NOT id = 1003;
LIKE
# Jack Mask
SELECT * FROM employees WHERE name LIKE '%a%';
# 以 a 开头
SELECT * FROM employees WHERE name LIKE 'a%';
# 以 a 结尾
SELECT * FROM employees WHERE name LIKE '%a';
### 包含 a 或者包含 e
SELECT * FROM employees WHERE name LIKE '%a%' AND name LIKE '%c%';
### a 必须在 e 前面
SELECT * FROM employees WHERE name LIKE '%a%e%';
### 查询第二个字符是 a 的名字
SELECT * FROM employees WHERE name LIKE '_a%';
### 查询第二个字符是下划线且第三个字符是 a 的信息 使用转义字符
SELECT * FROM employees WHERE name LIKE '__a%';
SELECT * FROM employees WHERE name LIKE '_$_a%' ESCAPE '$';
# ESCAPE 意思是将`$`作为转义字符
一些字符
占位符
%:0 个或多个字符
_:一个字符
转义字符
``:普通转义字符
关键字ESCAPE定义转义字符
正则表达式 REGEXP、RLIKE
逻辑运算符
| 运算符 | 作用 | 示例 | ||||
|---|---|---|---|---|---|---|
NOT 或 ! | 逻辑非 | SELECT NOT A | ||||
AND 或 && | 逻辑与 | SELECT A AND B; SELECT A && B; | ||||
OR 或 ` | ` | 逻辑或 | SELECT A OR B; SELECT A | B; | ||
| XOR | 逻辑异或 | SELECT A XOR B; |
XOR逻辑异或:只要 A 与 B 一真一假,那么结果就为真,一样则为假
AND可以与OR一起参与运算,但是AND的优先级要高于OR;
## 先运算 A AND B 与 C AND D,然后再 OR
A AND B OR C AND D;
位运算符
| 运算符 | 作 用 | 示 例 | ||
|---|---|---|---|---|
| & | 按位与 | SELECT A & B | ||
| 按位或 | SELECT A | B | ||
| 按位异或 | SELECT A ^ B | |||
| ~ | 按位取反 | SELECT ~ B | ||
| >> | 按位右移 | SELECT A >> 2 | ||
| << | 按位左移 | SELECT A << 2 |
\