MySQL 运算符实战:9 道经典练习题解析

运算符是 MySQL 查询的 “灵魂”,灵活运用各类运算符能让数据筛选更加精准高效。本文通过 9 道实战练习题,详解逻辑运算符、比较运算符及模糊匹配的用法,帮你快速掌握运算符的核心应用场景。

一、范围查询:NOT BETWEEN 与 OR 的灵活运用

题目 1:选择工资不在 5000 到 12000 的员工的姓名和工资

解决方案
-- 方法1:使用OR逻辑运算符
SELECT last_name, salary
FROM employees
WHERE salary < 5000 OR salary > 12000;-- 方法2:使用NOT BETWEEN(更简洁)
SELECT last_name, salary
FROM employees
WHERE salary NOT BETWEEN 5000 AND 12000;
知识点解析
  • BETWEEN AND:表示闭区间范围(包含边界值),salary BETWEEN 5000 AND 12000 等价于 salary >= 5000 AND salary <= 12000;

  • NOT 取反:NOT BETWEEN 直接排除范围内的数据,比 OR 更简洁,可读性更高;

  • 适用场景:连续范围的反向筛选,优先用 NOT BETWEEN。

二、集合查询:IN 与 OR 的效率对比

题目 2:选择在 20 或 50 号部门工作的员工姓名和部门号

解决方案
-- 方法1:使用OR逻辑运算符
SELECT last_name, department_id
FROM employees
WHERE department_id = 20 OR department_id = 50;-- 方法2:使用IN集合运算符(推荐)
SELECT last_name, department_id
FROM employees
WHERE department_id IN (20, 50);
知识点解析
  • IN 运算符:用于匹配离散的多个值,IN (20,50) 等价于 =20 OR =50,但代码更简洁;

  • 性能优势:当集合元素较多(如 10 个以上),IN 的执行效率通常高于多个 OR 拼接;

  • 注意:IN 列表中若包含 NULL,不会影响非 NULL 值的匹配,但结果可能包含 NULL。

三、NULL 值处理:IS NULL 与 IS NOT NULL

题目 3:选择公司中没有管理者的员工姓名及 job_id

解决方案
SELECT last_name, job_id
FROM employees
WHERE manager_id IS NULL;

题目 4:选择公司中有奖金的员工姓名、工资和奖金级别

解决方案
SELECT last_name, salary, commission_pct
FROM employees
WHERE commission_pct IS NOT NULL;
知识点解析
  • NULL 的特殊性:NULL 表示 “未知值”,不能用 = 或 != 判断,必须用 IS NULL(为空)或 IS NOT NULL(非空);

  • 应用场景:判断字段是否未填写(如管理者 ID、奖金比例),避免因 NULL 导致的筛选遗漏;

  • 注意:IFNULL(commission_pct, 0) 可将 NULL 转换为 0(如计算年薪时),但筛选时仍需用 IS NOT NULL。

四、模糊匹配:LIKE 通配符的精准用法

题目 5:选择员工姓名的第三个字母是 a 的员工姓名

解决方案
SELECT last_name
FROM employees
WHERE last_name LIKE '__a%';
解析
  • LIKE 通配符:_ 匹配单个任意字符,% 匹配 0 个或多个任意字符;

  • 模式说明a% 表示前两个字符任意,第三个字符为a,后续字符不限( 对应两个位置)。

题目 6:选择姓名中有字母 a 和 k 的员工姓名

解决方案
SELECT last_name
FROM employees
WHERE last_name LIKE '%a%k%' OR last_name LIKE '%k%a%';
解析
  • 多条件模糊匹配:需考虑两种顺序(a在前k在后或k在前a在后),用 OR 连接;

  • 注意:% 可匹配任意长度字符(包括 0),确保不遗漏包含两个字符的所有情况。

题目 7:显示表 employees 中 first_name 以 ‘e’ 结尾的员工信息

解决方案
-- 方法1:使用LIKE
SELECT employee_id, first_name, last_name
FROM employees
WHERE first_name LIKE '%e';-- 方法2:使用REGEXP正则(更灵活)
SELECT employee_id, first_name, last_name
FROM employees
WHERE first_name REGEXP 'e$';
解析
  • 结尾匹配:%e 表示以e结尾(LIKE),e$ 表示以e结尾(REGEXP正则);

  • REGEXP 优势:支持更复杂的模式(如多字符结尾),适合高级字符串匹配。

五、区间与集合综合运用

题目 8:显示表 employees 部门编号在 80-100 之间的姓名、工种

解决方案
SELECT last_name, job_id
FROM employees
WHERE department_id BETWEEN 80 AND 100;
解析
  • 连续区间优选 BETWEEN:BETWEEN 80 AND 100 等价于 >=80 AND <=100,代码更简洁;

  • 注意:区间包含边界值(80 和 100),若需排除边界需用 > 和 <。

题目 9:显示表 employees 的 manager_id 是 100、101、110 的员工姓名、工资、管理者 id

解决方案
SELECT last_name, salary, manager_id
FROM employees
WHERE manager_id IN (100, 101, 110);
解析
  • 离散值集合用 IN:IN (100,101,110) 清晰表达 “属于指定集合”,比 =100 OR =101 OR =110 更易读;

  • 扩展:若集合元素来自子查询,可写成 IN (SELECT …),实现动态匹配。

总结:运算符核心用法速查表

运算符 / 语法作用典型场景
BETWEEN A AND B匹配 A 到 B 的闭区间工资、年龄等连续范围查询
NOT BETWEEN排除 A 到 B 的区间反向范围筛选
IN (值1,值2…)匹配离散集合中的值部门 ID、管理者 ID 等固定选项
IS NULL判断字段为空查找未分配管理者、无奖金的记录
IS NOT NULL判断字段非空查找有奖金、已填写信息的记录
LIKE ‘%a%’模糊匹配包含 a 的字符串姓名、职位等包含特定字符的查询
LIKE ‘__a%’匹配第三个字符为 a 的字符串固定位置字符匹配
REGEXP ‘e$’正则匹配以 e 结尾的字符串复杂模式的字符串匹配

通过这 9 道题,可掌握运算符在实际场景中的灵活应用。记住:优先用 IN 替代多 OR、用 BETWEEN 简化连续范围、用 IS NULL 处理空值,能让你的 SQL 更简洁高效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/93809.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/93809.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/93809.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【R语言】更换电脑后,如何在新设备上快速下载原来设备的 R 包?

【R语言】更换电脑后&#xff0c;如何在新设备上快速下载原来设备的 R 包&#xff1f; 在日常使用 R 进行数据分析时&#xff0c;我们往往会安装很多包&#xff08;packages&#xff09;&#xff0c;一旦更换电脑&#xff0c;手动一个一个重新安装会非常麻烦。本文介绍一种简单…

如何在 Ubuntu 24.04 或 22.04 LTS 上安装 PowerShell

在本教程中,我们将学习如何在 Ubuntu 24.04 Noble 或 22.04 Jammy JellyFish Linux 中通过命令终端安装 Microsoft Windows PowerShell。 Windows PowerShell 既是一个命令行外壳程序,也是一种脚本语言。它拥有超过 130 个遵循一致语法和命名约定的命令行工具,称为 cmdlet(…

基于支持向量机的数据回归预测(libsvm) SVM

一、作品详细简介 1.1附件文件夹程序代码截图 全部完整源代码&#xff0c;请在个人首页置顶文章查看&#xff1a; 学行库小秘_CSDN博客​编辑https://blog.csdn.net/weixin_47760707?spm1000.2115.3001.5343 1.2各文件夹说明 1.2.1 main.m主函数文件 这段 MATLAB 代码实现…

Flowith-节点式GPT-4 驱动的AI生产力工具

本文转载自&#xff1a;Flowith-节点式GPT-4 驱动的AI生产力工具 - Hello123工具导航 ** 一、节点式 AI 工作流革新者&#xff1a;Flowith 深度解析 二、产品核心定位 Flowith 是一款基于 GPT-4 Turbo 的节点式 AI 生产力工具&#xff0c;突破传统单线程聊天模式&#xff0c…

MySQL的事务日志:

目录 redo&#xff08;重做日志&#xff09;&#xff1a; 特点&#xff1a; 组成&#xff1a; 整体流程&#xff1a; redo log buffer与redo log file之间的刷盘策略&#xff1a; 异步刷盘&#xff1a; 同步刷盘&#xff1a; 拆中策略&#xff1a; undo&#xff08;回…

JavaScript 中 throw error 与 throw new Error(error) 的用法及区别,分别适合什么场景使用?

JavaScript 中 throw error 与 throw new Error(error) 的用法及区别 在 JavaScript 中&#xff0c;throw 关键字用于抛出异常。当代码遇到某些错误或异常情况时&#xff0c;可以通过抛出错误来通知程序&#xff0c;方便后续的错误处理。尽管 throw 的使用看似简单&#xff0c…

鸿蒙自带组件效果大全

图形变换-视效与模糊-通用属性-ArkTS组件-ArkUI&#xff08;方舟UI框架&#xff09;-应用框架 - 华为HarmonyOS开发者 注意:找到需求效果之后先对一下版本 视距 图像效果 图片裁剪 颜色渐变 前景属性设置 外描边设置: 视效设置: 组件内容模糊 运动模糊 点击回弹效果…

ISP算法如何优化提升成像质量

ISP算法通过多维度技术协同优化成像质量&#xff0c;核心优化路径如下&#xff1a;一、降噪与细节增强‌AI驱动降噪‌深度学习模型实时识别噪点模式&#xff0c;暗光场景信噪比提升5倍以上&#xff0c;同时保留纹理细节。时空域联合降噪技术抑制运动模糊&#xff0c;鬼影消除率…

单例模式及优化

单例模式是一种创建型设计模式&#xff0c;其核心是确保一个类在程序中只能存在唯一实例&#xff0c;并提供一个全局访问点。这种模式适用于需要集中管理资源&#xff08;如日志、配置、连接池&#xff09;的场景&#xff0c;避免资源冲突和重复创建的开销。 一、介绍 类型 单例…

Dockerfile优化指南:利用多阶段构建将Docker镜像体积减小90%

更多如果你已经跟随我们之前的教程&#xff0c;亲手将自己的应用装进了Docker这个“魔法盒子”&#xff0c;那你可能很快就会遇到一个幸福但又尴尬的烦恼&#xff1a;你亲手构建的Docker镜像&#xff0c;竟然像一个塞满了石头和棉被的行李箱&#xff0c;臃肿不堪&#xff0c;笨…

英文PDF翻译成中文怎么做?试试PDF翻译工具

在全球化快速发展的时代&#xff0c;跨语言交流变得愈发频繁&#xff0c;无论是学术研究、商务合作还是日常学习&#xff0c;都离不开一个高效、准确的翻译工具。尤其是对于PDF文件的翻译需求&#xff0c;更是日益增长。今天&#xff0c;就让我们一起深入了解几款在PDF翻译领域…

macOS使用brew切换Python版本【超详细图解】

目录 一、更新Homebrew仓库 二、安装pyenv 三、将pyenv添加到bash_profile文件中 四、使.bash_profile文件的更改生效 五、安装需要的Python版本 六、设置全局使用的Python版本 七、检查Python版本是否切换成功 pyenv常用命令 一、更新Homebrew仓库 brew update 这个…

[矩阵置零]

初始思路分析 这段代码实现了将矩阵中元素为0的行和列全部置零的功能。主要思路是使用标记数组记录需要置零的行和列。以下是详细分析&#xff1a; 1. 初始化阶段 int m matrix.size(); int n matrix[0].size(); vector<bool> row(m), col(n);获取矩阵的行数m和列数n创…

redis-集成prometheus监控(k8s)

一. 简介&#xff1a; 关于redis的简介和部署&#xff0c;可以参考单独的文章redis-sentinel基础概念及部署-CSDN博客&#xff0c;这里就不细说了。这里只讲讲如何在k8s中部署export并基于prometheus做redis的指标采集。 二. 实现方式&#xff1a; 首先我们需要先部署exporter…

OVS:ovn为什么默认选择Geneve作为二层隧道网络协议?

首先确认 Geneve 是一种封装协议,可能提供比 VLAN 或 VXLAN 更灵活的扩展能力,这对 OVN 的多租户场景很重要。可能需要支持更多元数据字段,比如携带网络策略信息,这符合 SDN 集中控制的需求。 性能方面需要考虑封装效率和硬件支持情况,虽然 Geneve 头部稍大,但现代网卡的…

grep命令要点、详解和示例

grep技术要点 1) 工作模型&#xff08;3 件事&#xff09; 输入&#xff1a;从文件或标准输入&#xff08;-&#xff09;读入&#xff0c;一次按“行”处理&#xff08;除非用 -z 改成以 NUL 作为“行”分隔&#xff09;。匹配&#xff1a;把每一行拿去和模式&#xff08;patte…

nVidia Tesla P40使用anaconda本地重编译pytorch3d成功加载ComfyUI-3D-Pack

背景 自己用的是nVidia Tesla P40&#xff0c;垃圾佬专属卡 使用下面的由YanWenKun提供的ComfyUI-3D-Pack预安装环境&#xff0c;但在本地编译pytorch3d这一步出错&#xff0c;后面有出错信息&#xff0c;如果有和我一样的卡一样的问题&#xff0c;参看此文的解决方法 老版本…

网络基础——协议认识

文章目录网络基础网络的发展——引出一些概念协议认识初识协议协议分层协议分层的模型再谈协议为什么要有TCP/IP协议TCP/IP协议的宏观认识宏观理解TCP/IP协议和操作系统的关系协议的真正本质网络基础 本篇文章&#xff0c;我们将正式进入网络部分的学习。这是网络部分的第一篇…

云原生俱乐部-RH134知识点总结(2)

这一章的内容也会比较多&#xff0c;因为预期三篇文章更完RH134系列&#xff0c;所以每章安排的内容都比较多&#xff0c;并且RH134上面的都是重点&#xff0c;一点也不好写。昨天一天将RH124系列写完了&#xff0c;今天争取将RH134系列写完。至于我为什么要着急将这些写完&…

深度学习-计算机视觉-微调 Fine-tune

1. 迁移学习迁移学习&#xff08;transfer learning&#xff09;是一种机器学习方法&#xff0c;通过将源数据集&#xff08;如ImageNet&#xff09;上训练得到的模型知识迁移到目标数据集&#xff08;如特定场景的椅子识别任务&#xff09;。这种方法的核心在于利用预训练模型…