Mysql(3)运算符

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


运算符

算数运算符

运算符 说明
+ 求和,MySQL中 + 没有字符串拼接功能
-
*
/
div 整除,只保留整数部分
% mod 模,取余

示例:

python 复制代码
select 2+3;
select 9/2,9 div 2;
select 10.1/2.1,10.1 div 2.1;
select 9%2,9 mod 2;
select "hello"+"world";# 结果为0
-- NULL与其他数据类型的运算结果为NULL
select 2+null;
select "hello"+null;
select date("2020-01-01")+null;

比较运算符

运算符 说明
> 大于
< 小于
>= 大于等于
<= 小于等于
= 等于,不能用于NULL判断(使用is来判断是否为null)
!= 或 <> 不等于,不能用于NULL判断

示例:

python 复制代码
use atguigu;
-- 查询薪资高于15000的员工姓名和薪资
select ename,salary from t_employee where salary>15000;
-- 查询薪资为9000的员工的姓名和薪资
select ename,salary from t_employee where salary=9000;
-- 查询地址不在北苑的
select * from t_employee where address!="北苑";
select * from t_employee where address<>"北苑";

区间或集合范围比较运算符

运算符 说明
between x and y 处于区间内
not between x and y 不处于区间内
in(x,y,z) 处于集合内
not in (x,y,z) 不处于集合内

示例

python 复制代码
use atguigu;
-- 查询薪资在[10000,15000]
select * from t_employee where salary>=10000 && salary<=15000;
select * from t_employee where salary between 10000 and 15000;
-- 查询薪资不在[10000,15000]
select * from t_employee where salary not between 10000 and 15000;
-- 查询地址在这几个地方的
select * from t_employee where address in ('北苑', '望京', '龙泽');
-- 查询地址不在这几个地方的
select * from t_employee where address not in ('北苑', '望京', '龙泽');

模糊匹配比较运算符

运算符 说明
% 代表任意个字符
_ 代表1个字符,如果2个下划线就代表2个字符

示例:

python 复制代码
use atguigu;
-- 查询名字有 冰 字的
select * from t_employee where ename like '%冰%';
-- 查询名字以 雨 结尾的
select * from t_employee where ename like '%雨';
-- 查询名字以 李 开头的
select * from t_employee where ename like '李%';
-- 查询名字有 红 这个字,但是 红 的前面只能有1个字
select * from t_employee where ename like '_红%';
-- 查询当前MySQL数据库的字符集情况
show variables like '%character%';

逻辑运算符

运算符 说明
&& 或 and 逻辑与
或 or 逻辑或
! 或 not 逻辑非
xor 逻辑异或

示例:

python 复制代码
use atguigu;
-- 查询薪资高于15000,并且性别是男的员工
select * from t_employee where salary>15000 and gender='男';
-- 查询薪资高于15000,或者did为1的员工
select * from t_employee where salary>15000 || did = 1;
-- 查询薪资不在[15000,20000]范围的
select * from t_employee where !(salary between 15000 and 20000);
-- 查询薪资高于15000,或者did为1的员工,两者只能满足其一
select * from t_employee where salary>15000 xor did = 1;
select * from t_employee where (salary>15000) ^ (did = 1);

关于NULL值的问题

运算符 说明
is null或 <=>null 是NULL
is not null 不是NULL
ifnull(x,y) 当x是NULL时,用y代替

示例:

python 复制代码
use atguigu;
-- 查询奖金比例为null的员工
select * from t_employee where commission_pct is null;
select * from t_employee where commission_pct <=> null;
-- 查询奖金比例不为null的员工
select * from t_employee where commission_pct is not null;
-- 查询员工的实发工资,实发工资 = 薪资 + 薪资 * 奖金比例
select ename ,salary , commission_pct, salary + salary * ifnull(commission_pct,0) "实发工资" from t_employee;

《MySQL 运算符》学习笔记最终总结版


一、运算符总览

MySQL 中的运算符主要分为以下六类:

  1. 算术运算符
  2. 比较运算符
  3. 区间与集合运算符
  4. 模糊匹配运算符(LIKE)
  5. 逻辑运算符
  6. NULL 值相关运算符

下面按类别整理核心知识点和典型示例。


二、各类运算符详解

1. 算术运算符
运算符 说明 示例
+ 加法(不能拼接字符串) SELECT 2+3; → 5
- 减法 SELECT 10-3; → 7
* 乘法 SELECT 5*4; → 20
/ 除法(保留小数) SELECT 9/2; → 4.5000
DIV 整除(只保留整数部分) SELECT 9 DIV 2; → 4
%MOD 取模(取余数) SELECT 10%3; → 1

示例

sql 复制代码
SELECT "hello" + "world";     -- 结果为 0(+不能拼接字符串)
SELECT 2 + NULL;              -- 结果为 NULL

2. 比较运算符
运算符 说明 注意事项
><>=<= 大于、小于、大于等于、小于等于 常规比较
= 等于 不能用于判断 NULL
!=<> 不等于 不能用于判断 NULL

示例

sql 复制代码
SELECT * FROM t_employee WHERE salary > 15000;
SELECT * FROM t_employee WHERE address != '北苑';
SELECT * FROM t_employee WHERE address <> '北苑';

3. 区间与集合运算符
运算符 说明
BETWEEN x AND y 处于区间内(闭区间
NOT BETWEEN x AND y 不处于区间内
IN (x,y,z) 在集合内
NOT IN (x,y,z) 不在集合内

示例

sql 复制代码
SELECT * FROM t_employee 
WHERE salary BETWEEN 10000 AND 15000;

SELECT * FROM t_employee 
WHERE address IN ('北苑', '望京', '龙泽');

4. 模糊匹配运算符(LIKE)
通配符 说明
% 代表任意个字符(包括0个)
_ 代表1个字符

示例

sql 复制代码
SELECT * FROM t_employee WHERE ename LIKE '%冰%';     -- 包含"冰"
SELECT * FROM t_employee WHERE ename LIKE '李%';      -- 以"李"开头
SELECT * FROM t_employee WHERE ename LIKE '_红%';     -- 红前面只有一个字

查看字符集

sql 复制代码
SHOW VARIABLES LIKE '%character%';

5. 逻辑运算符
运算符 说明 替代写法
AND 逻辑与 &&
OR 逻辑或 `
NOT 逻辑非 !
XOR 逻辑异或 ^

示例

sql 复制代码
SELECT * FROM t_employee 
WHERE salary > 15000 AND gender = '男';

SELECT * FROM t_employee 
WHERE salary > 15000 XOR did = 1;   -- 两者只能满足一个

6. NULL 值相关处理
写法 说明
IS NULL<=> NULL 判断是否为 NULL
IS NOT NULL 判断是否不为 NULL
IFNULL(字段, 默认值) 如果字段为 NULL,则返回默认值

示例

sql 复制代码
SELECT * FROM t_employee WHERE commission_pct IS NULL;

SELECT ename, salary, commission_pct,
       salary * (1 + IFNULL(commission_pct, 0)) AS 实发工资
FROM t_employee;

三、易错点总结

以下是学习本章时最容易出错的地方,按严重程度排序:

  1. 使用 + 拼接字符串

    • 错误:SELECT 'hello' + 'world';
    • 正确:MySQL 中 + 只能做加法 ,字符串拼接要用 CONCAT() 函数。
  2. = 判断 NULL

    • 错误:WHERE commission_pct = NULL
    • 正确:必须使用 IS NULL<=> NULL
  3. BETWEEN 是闭区间

    • BETWEEN 10000 AND 15000 包含 10000 和 15000 两个边界值,新手容易误以为是开区间。
  4. LIKE%_ 的含义混淆

    • % = 任意多个字符(包括0个)
    • _ = 严格1个字符,容易写错个数。
  5. DIV/ 的区别

    • / 返回小数,DIV 只保留整数部分(向下取整)。
  6. 忘记处理 NULL 值导致计算结果为 NULL

    • 薪资×奖金比例时,如果 commission_pct 是 NULL,整个结果会变成 NULL,必须用 IFNULL() 处理。
  7. INNOT IN 对 NULL 的处理

    • 当集合中包含 NULL 时,NOT IN 的结果可能不符合预期,需特别小心。
  8. XOR(异或)使用不熟练

    • 逻辑异或表示"两者只能满足一个",实际开发中使用频率较低,但考试常考。
  9. 字符串比较时字符集影响

    • 中文比较结果可能受字符集和排序规则(Collation)影响,建议统一使用 utf8mb4
  10. 逻辑运算符优先级问题

    • NOT > AND > OR,复杂条件建议使用括号明确优先级。

相关推荐
絆人心8 小时前
Windows 下 MySQL sys 数据库误删恢复教程(mysql_upgrade 已废弃,新版适用)
mysql·数据库误删恢复·sys数据库恢复·mysql_upgrade
XDHCOM8 小时前
ORA-41722权限不足引发数据库变更通知故障,Oracle报错修复与远程处理方案引热议
数据库·oracle
修己xj8 小时前
人大金仓 KingbaseES V8 数据库 Docker 部署指南
数据库
Yushan Bai8 小时前
windows环境oracle 11.2.0.1版本数据库启动报错ORA-01589问题的处理
数据库·oracle
予早8 小时前
Redis 设置库的数量
数据库·redis·缓存
奔跑吧树袋熊9 小时前
Oracle 9i 与 19c 跨版本字符集乱码(US7ASCII ↔ AL32UTF8)DBLink 解决方案
数据库·oracle
byzh_rc9 小时前
[AI编程从入门到入土] 配置文件
java·数据库·ai编程
oradh9 小时前
Oracle数据库模式、对象的入门概述
数据库·oracle·oracle数据库基础
雷工笔记9 小时前
SQL语句解析:DESC LIMIT 1
数据库·sql