精选专栏链接 🔗
- MySQL技术笔记专栏
- Redis技术笔记专栏
- 大模型搭建专栏
- Python学习笔记专栏
- 深度学习算法专栏
欢迎订阅,点赞+关注,每日精进1%,共攀技术高峰
更多内容持续更新中!希望能给大家带来帮助~ 😀😀😀
MySQL中的算术运算符和比较运算符
- 1,MySQL中的DUAL关键字
- 2,算术运算符
- 3,比较运算符
- 3.1,符号型运算符
- 3.1.1,等号运算符
- 3.1.2,安全等于运算符
- 3.1.3,不等于运算符
- 3.1.4,其他符号型运算符总结
- 3.2,非符号型运算符
- 3.2.1,IS NULL :为空运算符
- 3.2.1,IS NOT NULL: 不为空运算符
- 3.2.3,LEAST:最小值运算符
- 3.2.4,GREATEST:最大值运算符
- 3.2.5,BETWEEN AND运算符
- 3.2.6,IN 和NOT IN运算符
- 3.2.7,LIKE:模糊查询运算符
- 3.2.8,ESCAPE 运算符
- 4,逻辑运算符
1,MySQL中的DUAL关键字
DUAL 关键字是 MySQL数据库 中的一个特殊表,主要用于在不需要从具体表中获取数据时进行查询操作。DUAL表是一个虚拟表
,以运行如下SQL代码为例:
SELECT 1,3*2
FROM DUAL;
代码运行结果如下:
2,算术运算符
算术运算符主要用于数学运算,其可以连接运算符前后的两个数值或表达式,对数值或表达式进行运算。
MySQL中常见的算术运算符有:加(+)、减(-)、乘(*)、除(/或DIV)和取模(%或MOD)。接下来以SQL代码为例理解算术运算符:
①加法与减法运算符
SELECT 100, 100 + 0, 100 - 0, 100 + 50, 100 + 50 -30, 100 + 35.5, 100 - 35.5
FROM DUAL;
运行结果如下:
②乘法与除法运算符
SELECT 100, 100 * 1, 100 * 1.0, 100 / 1.0, 100 / 2,100 + 2 * 5 / 2,100 /3, 100 DIV 0
FROM DUAL;
运行结果如下:
注意点:
- 有浮点数参与运算,则结果为浮点数;如(100 * 1.0结果为100.0);
- 整数相除结果为浮点数。 因为大多数情况下的整数相除结果不能除尽,因此MySQL中默认了是除不尽的情况,即使除尽了也是浮点数;
- 分母为0则结果为Null;
③取模(求余)运算符
SELECT 12 % 3, 12 MOD 5, 12 MOD -5, -12 % 5,-12 % -5FROM dual;
运行结果如下:
注意:取余运算结果的正负与被模数一致(即%前面的数值)
练习:从员工表中查询员工id为偶数的员工信息
SQL代码如下:
SELECT employee_id,last_name,salaryFROM employeesWHERE employee_id % 2 = 0;
查询得到的结果集如下:
3,比较运算符
比较运算符用来对表达式左边的操作数和右边的操作数进行比较,比较的结果为真则返回1,比较的结果为假则返回0,其他情况则返回NULL。比较运算符可以分为符号类型和非符号类型。
3.1,符号型运算符
3.1.1,等号运算符
运行如下SQL代码:
SELECT 1 = 2,1 != 2,1 = '1',1 = 'a',0 = 'a'
FROM DUAL;
运行结果如下:
运行如下SQL代码:
SELECT 'a' = 'a','ab' = 'ab','a' = 'b'
FROM DUAL;
运行结果如下:
注意点:
- 如果等号两边的值一个是整数,一个是字符串,则MySQL会按照字符串进行比较。如:1 = ‘1’ 进行比较时,会将字符串转换为数值1 ;
- 字符串存在隐式转换。如果转换数值不成功,则看做0;比如1=‘a’ ,字符串转数值失败,会变为0;
- 如果等号两边都是字符串,MySQL会按照字符串进行比较,比较各自字符的ASCII编码;
如果等号两边的值、字符串或表达式中有一个为NULL,则比较结果为NULL。
易错例子:筛选出employees表内commission_pct为Null的员工信息
SQL语句如果写成:
SELECT last_name,salary,commission_pct
FROM employees
WHERE commission_pct = NULL;
此时执行查询,没有任何结果,如下图所示:
原因就是WHERE语句中有Null参与比较,而只要等号两边有一个Null,结果就是Null。可以使用接下来介绍的安全等于运算符解决此问题。
3.1.2,安全等于运算符
安全等于运算符**(<=>)与等于运算符(=)的作用是相似的
,唯一的区别是‘<=>’可以用来对NULL进行判断。在两个操作数均为NULL时,其返回值为1,而不为NULL;当一个操作数为NULL时,其返回值为0,而不为NULL。
SQL代码示例如下:
SELECT 1 <=> '1', 1 <=> 0, 'a' <=> 'a', (5 + 3) <=> (2 + 6), '' <=> NULL,NULL <=> NULL
FROM DUAL;
运行结果如下:
回顾例子:筛选出employees表内commission_pct为Null的员工信息
对此例子,可以使用安全等于
(<=>)进行查询:
SELECT last_name,salary,commission_pct
FROM employees
WHERE commission_pct <=> NULL;
运行结果如下:
3.1.3,不等于运算符
不等于运算符( <> 和 != )用于判断两边的数字、字符串或者表达式的值是否不相等,如果不相等则返回1,相等则返回0
。不等于运算符不能判断NULL值。如果两边的值有任意一个为NULL,或两边都为NULL,则结果为NULL。
SQL示例如下:
SELECT 1 <> 1, 1 != 2, 'a' != 'b', (3+4) <> (2+6), 'a' != NULL, NULL <> NULLFROM DUAL;
运行结果如下:
3.1.4,其他符号型运算符总结
运算符 | 名称 | 作用 | 示例 |
---|---|---|---|
< | 小于运算符 | 判断前面的值、字符串或表达式是否小于后面的值、字符串或表达式 | SELECT C FROM TABLE WHERE A < B |
> | 大于运算符 | 判断前面的值、字符串或表达式是否大于后面的值、字符串或表达式 | SELECT C FROM TABLE WHERE A > B |
<= | 小于等于运算符 | 判断前面的值、字符串或表达式是否小于等于后面的值、字符串或表达式 | SELECT C FROM TABLE WHERE A <= B |
>= | 大于等于运算符 | 判断前面的值、字符串或表达式是否大于等于后面的值、字符串或表达式 | SELECT C FROM TABLE WHERE A >= B |
3.2,非符号型运算符
3.2.1,IS NULL :为空运算符
回顾例子:筛选出employees表内commission_pct为Null的员工信息
前面介绍了使用安全等于运算符筛选 Null 字段。我们还可以使用IS NULL
运算符进行筛选:
SELECT last_name,salary,commission_pct
FROM employees
WHERE commission_pct IS NULL;
3.2.1,IS NOT NULL: 不为空运算符
继续看例子:筛选出employees表内commission_pct不为Null的员工信息
SQL语句如下:
SELECT last_name,salary,commission_pct
FROM employees
WHERE commission_pct IS NOT NULL;
运行结果如下:
总结:查询commission_pct等于NULL。可以有以下四种写法:
SELECT employee_id,commission_pct FROM employees WHERE commission_pct IS NULL;
SELECT employee_id,commission_pct FROM employees WHERE commission_pct <=> NULL;
SELECT employee_id,commission_pct FROM employees WHERE ISNULL(commission_pct);
SELECT employee_id,commission_pct FROM employees WHERE commission_pct = NULL;
3.2.3,LEAST:最小值运算符
LEAST最小值运算符,用于在多个值中返回最小值。
SQL示例如下:
SELECT LEAST (1,0,2), LEAST('b','a','c'), LEAST(1,NULL,2)FROM DUAL;
运行结果如下:
通过结果可以看出:
- 当参数是整数或者浮点数时,LEAST将返回其中最小的值;
- 当参数为字符串时,LEAST返回字母表中顺序最靠前的字符;
- 当比较值列表中有NULL时,LEAST不能判断大小,返回值为NULL;
3.2.4,GREATEST:最大值运算符
GREATEST最大值运算符,用于在多个值中返回最小值。
SQL示例如下:
SELECT GREATEST(1,0,2), GREATEST('b','a','c'), GREATEST(1,NULL,2)
FROM DUAL;
运行结果如下:
通过结果可以看出:
- 当参数中是整数或者浮点数时,GREATEST将返回其中最大的值;
- 当参数为字符串时,GREATEST返回字母表中顺序最靠后的字符;
- 当比较值列表中有NULL时,GREATEST不能判断大小,返回值为NULL;
3.2.5,BETWEEN AND运算符
BETWEEN AND运算符使用的格式通常为:SELECT D FROM TABLE WHERE C BETWEEN A AND B
,此时,当C大于或等于A
,并且C小于或等于B
时,结果为1,否则结果为0。
SQL示例如下:
SELECT 1 BETWEEN 0 AND 1, 10 BETWEEN 11 AND 12, 'b' BETWEEN 'a' AND 'c'
FROM DUAL;
运行结果如下:
应用示例:查询employees表内工资在6000到8000的员工信息;
SQL语句如下:
SELECT employee_id,last_name,salary
FROM employees
WHERE salary BETWEEN 6000 AND 8000;
查询得到的结果集如下:
需要注意的是:SELECT D FROM TABLE WHERE C BETWEEN A AND B;
,其中A为下边界,C为上边界,不可颠倒,否则可能查询不到数据。
如果需求改变,要求查询employees表内工资
不在
6000到8000的员工信息呢?
SQL语句如下:
SELECT employee_id,last_name,salary
FROM employees
WHERE salary NOT BETWEEN 6000 AND 8000;
查询得到的结果集如下:
3.2.6,IN 和NOT IN运算符
IN运算符用于**判断给定的值是否是IN列表中的一个值,如果是则返回1,否则返回0。
应用示例:查询部门为10、20、30部门的员工信息
SQL示例如下:
SELECT last_name,salary,department_id
FROM employees
WHERE department_id IN (10,20,30);
或者采用下面这种方案:
SELECT last_name,salary,department_id
FROM employees
where department_id = 10 or department_id = 20 or department_id = 30;
运行结果如下:
NOT IN运算符用于判断给定的值是否不是IN列表中的一个值,如果不是IN列表中的一
个值,则返回1,否则返回0。
应用示例:查询工资不是6000、7000、8000的员工信息
SQL示例如下:
SELECT last_name,salary,department_id
FROM employees
WHERE salary NOT IN (6000,7000,8000);
运行结果如下:
3.2.7,LIKE:模糊查询运算符
LIKE运算符主要用来匹配字符串,通常用于模糊匹配,如果满足条件则返回1,否则返回
0。如果给定的值或者匹配条件为NULL,则返回结果为NULL。
应用示例:查询last_name中包含字符 ‘a’ 的员工信息
SQL示例如下:
SELECT last_name
FROM employees
WHERE last_name LIKE '%a%';
运行结果如下:
其中 %a% 中的 “%”是通配符,它代表不确定个数的字符。另外“_” 也是常用的通配符,二者区别如下:
- “%”:匹配0个或多个字符。
- “_”:只能匹配一个字符。
以下面的几个案例进行说明:
- “%a%” 表示查询 last_name 中包含字符a的员工信息;
- “a%” 表示查询last_name中以字符a开头的员工信息;
- “%a” 表示查询last_name中以字符a结尾的员工信息;
- “_a%” 表示查询last_name中第二个字符为a的员工信息;(一个下划线匹配一个字符)
- “_\_a%” 表示查询第二个字符为下划线,且第三个字符为a的 员工信息;(其中 “\” 表示转义)
3.2.8,ESCAPE 运算符
如果使用\表示转义,要省略ESCAPE。如果不想使用\表示转义,则要加上ESCAPE。
SQL示例(\表示转义):
SELECT last_name
FROM employees
WHERE last_name LIKE '_\_a%';
不想使用\进行转义,比如要求使用$进行转义。则可以修改SQL为:
SELECT last_name
FROM employees
WHERE last_name LIKE '_$_a%' ESCAPE '$';
4,逻辑运算符
逻辑运算符主要用来判断表达式的真假,在MySQL中,逻辑运算符的返回结果为1、0或者NULL。MySQL中支持的四种逻辑运算符分别是:逻辑与、逻辑或、逻辑非、逻辑异或。
运算符 | 作用 | 作用 |
---|---|---|
NOT 或 ! | 逻辑非 | SELECT NOT A |
AND 或 && | 逻辑与 | SELECT A AND B 或 SELECT && B |
OR 或II | 逻辑或 | SELECT A OR B 或 SELECT A | | B |
XOR | 逻辑异或 | SELECT A XOR B |
其中逻辑异或(XOR)运算符是当给定的值中任意一个值为NULL时,则返回NULL;如果
两个非NULL的值都是0或者都不等于0时,则返回0;如果一个值为0,另一个值不为0时,则返回1。简而言之,异或强调 “异” ,只有两边不同时,才返回1。
异或运算符SQL示例
SELECT 1 XOR -1, 1 XOR 0, 0 XOR 0, 1 XOR NULL, 1 XOR 1 XOR 1, 0 XOR 0 XOR 0;
运行结果如下: