MySQL | 常用运算符

92 阅读3分钟

常用运算符

+-*/

加减 |+-|隐式运算

SELECT 100+'1' FROM DUAL;
SELECT 100+'a' FROM DUAL;
SELECT 100+null FROM DUAL;

结果分别为101100null

当数字放在单引号之内做加减乘除的时候会出发隐式运算,所以结果是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;

结果:null null

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 AB;
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 AB
按位异或SELECT A ^ B
~按位取反SELECT ~ B
>>按位右移SELECT A >> 2
<<按位左移SELECT A << 2

\