Mysql从入门到精通day5————子查询精讲

news2025/4/3 1:10:13

本文主要讲述子查询的几种方法,读者注意体会它们的不同场合的适用情况及功能,本篇文章也融入了小编实践过程遇到的坑,希望读者不要再踩坑

一.带IN关键字的子查询

in关键字可以检测结果集中是否存在某个特定的值,检测成功则执行外部查询

这里我们使用之前的文章已经创建过的图书借阅表和图书信息表,先查看两表中的图书id部分,结果如下图:
在这里插入图片描述
下面的语句的意思是通过in关键字从图书借阅表中查询图书id,前提条件是这个id在图书信息表也出现过,然后返回图书id,图书名,作者,价格可以看出上图中的图书信息表中的id有4个,但是查询记录只有三条即两表的公共部分
在这里插入图片描述

二.带exists关键字的子查询

使用exists关键字时,内层查询不返回查询记录而是返回一个布尔值,内层查询到满足条件的记录返回true然后外层语句进行查询否则外层语句不执行查询

在这里插入图片描述
如图,内层查询两表的公共id外层返回查询到的记录

三.带比较运算符的子查询

为了使读者更直观了解比较运算符查询我们新建了两个表为图书归还表和管理员信息表
在这里插入图片描述
在这里插入图片描述
然后我们插入数据包含姓名,年龄,部门
在这里插入图片描述
查看插入的结果
在这里插入图片描述
使用>号查询booknumber大于1的所有记录,由上图可知只有一条记录
在这里插入图片描述
下图是我们查询booknumber>=1的结果,limit 1限制结果为1条,不加会报错
在这里插入图片描述

我们注意下图有一条报错,报错原因是查询到的记录不止一条,有多条记录,这也是比较运算符的一个易错点,一般我们只需要满足条件的一条记录比如最高的或者最低的才使用比较运算符,如果需要多条结果则使用ALL/ANY关键字,下面会讲,这是小编实践发现的

在这里插入图片描述
我们改进的报错措施有三条:

1.使用limit 1限制结果为1条
2.使用ALL/ANY关键字显示多条记录
3.使用join on外连接查询

在这里插入图片描述
我们要想查询图书归还涉及的管理员信息可以采用in关键字,结果如上,所以关键字是需要活学活用的

四.带ANY和ALL关键字的子查询

第一步:我们先建立一个数据库,并创建一个学生成绩的表,包含学生的班级,姓名,班号
在这里插入图片描述
第二步:填充表数据并查看
插入数据代码:

insert into tb_student(classid,name,score) values
(13,'顾大可',60),
(14,'王三水',65),
(15,'王四火',80),
(13,'王光军',70);

插入结果如下图:
在这里插入图片描述
这里的classid的第一位数字表示年级,第二位数字表示班级,如13表示一年级三班

第三步:使用ANY关键字查询比一年级三班最低分高的所有学生的信息
语句如下:

select *from tb_student
where score>any(select score from tb_student where classid=13);

查询结果如下图,可以看出一年级三班的学生最低分是60分,所以比60分高的数据都被查了出来
在这里插入图片描述
总结:ANY关键字只要满足内层查询语句返回的结果中的任意一个就可以通过该条件就可以执行外层语句。相当于逻辑运算符中的或运算符

第四步:使用ALL关键字查询比一年级三班最高分高的所有学生的信息
语句如下:

select *from tb_student
where score>all(select score from tb_student where classid=13);

查询结果如下图,可以看出一年级三班的学生最高分是70分,所以比70分高的数据只有80被查了出来
在这里插入图片描述
总结:ALL关键字只要满足内层查询语句返回的所有结果才可以执行外层语句,相当于逻辑运算符中的与运算符

误区警示:使用select语句时一定要加from,切记一定要加!!!不加不会报错但会导致灾难性的结果!!!

这是小编在实践过程中忘了加from才发现的误区,但是奇怪的是系统没有报错,只是查询结果与正确结果相差很大,看下图:
在这里插入图片描述
这是使用ALL关键字不加from的结果,比正确结果多了一条记录

再来看一下使用ANY关键字不加from的结果

在这里插入图片描述
更是离了大谱了,直接成空集了,演都不演了

小编的教训希望能引起读者的高度重视

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

虫洞数观系列二 | Python+MySQL高效封装:为pandas数据分析铺路

目录 系列文章 1. 引言 2. 常规写法mysql 3. 封装设计接口mysql 3.1dbname.py文件 3.1.1. 导入和基类定义 3.1.2. 具体表定义类 3.1.3. 表定义整合函数 3.1.4. 全局字典和测试代码 3.2mysql_dao文件 3.2.1. 模块导入与配置 3.2.2. 数据库连接池初始化 3.2.3. Comm…

MySQl之Binlog

前言 Binlog(Binary Log)是MySQL中至关重要的日志模块,它直接关系到数据恢复、主从复制等高阶架构设计。无论你是刚入门的新手还是有一定经验的开发者,掌握Binlog的原理和应用都是进阶的必经之路。 BinLog是什么? Bin…

开源项目解读(https://github.com/zjunlp/DeepKE)

1.DeepKE 是一个开源的知识图谱抽取与构建工具,支持cnSchema、低资源、长篇章、多模态的知识抽取工具,可以基于PyTorch实现命名实体识别、关系抽取和属性抽取功能。同时为初学者提供了文档,在线演示, 论文, 演示文稿和海报。 2.下载对应的de…

「MethodArgumentTypeMismatchException:前端传递 ‘undefined‘ 导致 Integer 类型转换失败」

遇到的问题: Failed to convert value of type java.lang.String to required type java.lang.Integer; nested exception is java.lang.NumberFormatException: For input string: "undefined" 原因分析: 大致意思就是我传递的参数到后端没…

LabVIEW故障诊断数据处理方法

在LabVIEW故障诊断系统中,数据处理直接决定诊断的准确性和效率。工业现场常面临噪声干扰、数据量大、实时性要求高等挑战,需针对性地选择处理方法。本文结合电机故障诊断、轴承损伤检测等典型案例,详解数据预处理、特征提取、模式识别三大核心…

基于 SpringBoot 的火车订票管理系统

收藏关注不迷路!! 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,还有大家在毕设选题(免费咨询指导选题),项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多…

Python的概论

免责声明 如有异议请在评论区友好交流,或者私信 内容纯属个人见解,仅供学习参考 如若从事非法行业请勿食用 如有雷同纯属巧合 版权问题请直接联系本人进行删改 前言 提示:: 提示:以下是本篇文章正文内容&#xff0c…

构建大语言模型应用:句子转换器(Sentence Transformers)(第三部分)

本系列文章目录 简介数据准备句子转换器(本文)向量数据库搜索与检索大语言模型开源检索增强生成评估大语言模型服务高级检索增强生成 RAG 在之前的博客中,我们学习了为RAG(检索增强生成,Retrieval Augmented Generati…

怎样提升大语言模型(LLM)回答准确率

怎样提升大语言模型(LLM)回答准确率 目录 怎样提升大语言模型(LLM)回答准确率激励与规范类知识关联类情感与语境类逆向思维类:为什么不,反面案例群体智慧类明确指令类示例引导类思维引导类约束限制类反馈交互类:对话激励与规范类 给予奖励暗示:在提示词中暗示模型如果回…

【进阶】vscode 中使用 cmake 编译调试 C++ 工程

基于 MSYS2 的 MinGW-w64 GCC 工具链与 CMake 构建系统,结合VSCode及其扩展插件( ms-vscode.cmake-tools),可实现高效的全流程C开发调试。既可通过 VSCode 可视化界面(命令面板、状态栏按钮)便捷完成配置、…

流影---开源网络流量分析平台(三)(管理引擎部署)

目录 前沿 功能介绍 部署过程 前沿 在上一篇文章中,最后因为虚拟机的资源而没看到最后的效果,而是查看了日志,虽然效果是有了,但后来我等了很久,还是那个转圈的画面,所以我猜测可能是少了什么东西&#…

QT Quick(C++)跨平台应用程序项目实战教程 5 — 界面设计

目录 1.版面设计 2. 自定义按钮 2.1 自定义工具栏按钮 2.2 自定义图标按钮 3. 顶部工具栏 4. 主体 5. 底部工具栏 6. 主文件 7. 最终效果 上一章内容讲解了QML基本使用方法。本章内容继续延续“音乐播放器”项目主线,完成程序的界面设计任务。 1.版面设计…

【微服务架构】SpringCloud Alibaba(三):负载均衡 LoadBalance

文章目录 SpringCloud Alibaba1、核心组件2、优势3、应用场景 一、Loadbalance介绍二、Ribbon和Loadbalance 对比三、整合LoadBlance1、升级版本2、移除ribbon依赖,增加loadBalance依赖 四、自定定义负载均衡器五、重试机制六、源码分析1、猜测源码的实现2、初始化过…

06-02-自考数据结构(20331)- 查找技术-动态查找知识点

自考数据结构动态查找算法主要讲二叉树和平衡二叉树,但是感觉到了,就又续接了一部分,所以这篇备考的小伙伴着重看前两种就可以了。 知识拓扑 知识点介绍 二叉排序树(BST) 定义 二叉排序树(Binary Search Tree)又称二叉查找树,它或者是一棵空树,或者是具有下列性质的二…

Upload-labs 靶场搭建 及一句话木马的原理与运用

1、phpstudy及upload-labs下载 (1)下载phpstudy小皮面板 首先需要软件phpstudy 下载地址 phpStudy下载-phpStudy最新版下载V8.1.1.3 -阔思亮 (2)然后到github网址下载源码压缩包 网址 https://github.com/c0ny1/upload-labs 再…

爬虫的第三天——爬动态网页

一、基本概念 动态网页是指网页内容可以根据用户的操作或者预设条件而实时发生变化的网页。 特点: 用户交互:动态网页能够根据用户的请求而生成不同的内容。内容动态生成:数据来自数据库、API或用户输入。客户端动态渲染:浏览器…

力扣HOT100之矩阵:48. 旋转图像

这道题本来想用剥洋葱的办法的,一直写不对,放弃了。。。直接去看题解,用剥洋葱其实也可以做,就是要从外层处理到内层,每一个边界上的元素为matrix[0].size() - 1个,这样一来,四条边界上的元素个…

uniapp微信小程序获取用户手机号uniCloud云开发版

开发微信小程序,很多时候需要获取用户的手机号,这样方便平台更好的为用户服务,但是微信小程序不允许开发者直接获取用户的手机号,需要用户手动授权才能获取手机号,且需要配合后端进行解密才能获得完整的手机号&#xf…

31天Python入门——第18天:面向对象三大特性·封装继承多态

你好,我是安然无虞。 文章目录 面向对象三大特性1. 封装2. 继承3. 多态4. 抽象基类5. 补充练习 面向对象三大特性 面向对象编程(Object-Oriented Programming, 简称OOP)有三大特性, 分别是封装、继承和多态.这些特性是面向对象编程的基础, …

第十六届蓝桥杯模拟二(串口通信)

由硬件框图可以知道我们要配置LED 和按键 一.LED 先配置LED的八个引脚为GPIO_OutPut,锁存器PD2也是,然后都设置为起始高电平,生成代码时还要去解决引脚冲突问题 二.按键 按键配置,由原理图按键所对引脚要GPIO_Input 生成代码,在文件夹中添加code文件夹,code中添加fun.…