【MySQL】(8) 联合查询

一、联合查询的作用

        由于范式的规则,数据分到多个表中,想要查询完整的信息,就需要联合查询多张表。比如查询学生的学生信息和所在班级的信息,就需要联合查询学生表和班级表。

二、联合查询过程

        案例:查询学生姓名为孙悟空的详细信息,包括学学个人信息和班级信息。

 # 课程表
insert into course (name) values ('Java'), ('C++'), ('MySQL'), ('操作系统'), ('计算机网络'), ('数据结构');# 班级表
insert into class(name) values ('Java001班'), ('C++001班'), ('前端001班');# 学生表
insert into student (name, sno, age, gender, enroll_date, class_id) values ('唐三藏', '100001', 18, 1, '1986-09-01', 1),('孙悟空', '100002', 18, 1, '1986-09-01', 1),('猪悟能', '100003', 18, 1, '1986-09-01', 1),('沙悟净', '100004', 18, 1, '1986-09-01', 1),('宋江', '200001', 18, 1, '2000-09-01', 2),('武松', '200002', 18, 1, '2000-09-01', 2),('李逹', '200003', 18, 1, '2000-09-01', 2),('不想毕业', '200004', 18, 1, '2000-09-01', 2);# 成绩表
insert into score (score, student_id, course_id) values(70.5, 1, 1),(98.5, 1, 3),(33, 1, 5),(98, 1, 6),(60, 2, 1),(59.5, 2, 5),(33, 3, 1),(68, 3, 3),(99, 3, 5),(67, 4, 1),(23, 4, 3),(56, 4, 5),(72, 4, 6),(81, 5, 1),(37, 5, 5),(56, 6, 2),(43, 6, 4),(79, 6, 6),(80, 7, 2),(92, 7, 6);

1、确定联合查询的表

        学生表 student 和班级表 class,进行笛卡尔积

2、过滤掉班级号不匹配的信息

        学生表和班级表都有 id,需要指定是哪个表的 id。

3、筛选出指定学生

4、筛选出想要的字段,并精简表名

三、内连接

        上面的示例就是内连接。 

1、语法

select 字段 from 表1 别名1, 表2 别名2 where 连接条件 and 其他条件;select 字段 from 表1 别名1 [inner] join 表2 别名2 on 连接条件 where 其他条件;

2、示例1:查询“唐三藏”同学的成绩。

        查询的表:student、score。

        确定连接条件需要查看表结构:s.id = sc.student_id。

       其他条件:s.name = '唐三藏'。

       字段:s.name、sc.score。

3、示例2:查询所有同学的总成绩、个人信息。

        查询的表:student、score。

        连接条件:s.id = sc.student_id。

        分组查询:sc.student_id,① 唯一。② 对哪个表的列求和,就对那个表的列进行分组。

        查询字段:s.id、s.sno、s.name、s.age、s.gender、s.enroll_date、sc.s(分组后,这些字段的值对于某一组都是确定的,可以在分组后查询)、avg(sc.score)(聚合函数的值也是确定的)。

        查询结果:

4、示例3:查询所有同学的个人信息、每门课的成绩

        查询表:student、score、course。

        连接条件:

        查询结果:

        也可以使用:

        工作中尽量少对大表关联查询,最多关联 3 个表,因为很耗资源。

四、外连接

  • 左外连接:以左表为基准,显示左表所有值,显示右表匹配的值,没有匹配的就显示 NULL。
  • 右外连接:跟左外连接反着来。
  • 全连接:左、右都全显示,没有匹配的就显示 NULL。(MySQL 不支持

        内连接是有匹配的才显示,外连接没有匹配的也会显示 NULL。

1、语法

-- 左外连接,表1完全显⽰ 
select 字段 from 表名1 left join 表名2 on 连接条件;-- 右外连接,表2完全显⽰
select 字段 from 表名1 right join 表名2 on 连接条件;

2、示例1:查询没有参加考试的同学信息

        该查询就无法使用内连接完成

        查询的表:student、score。

        连接条件:s.id = sc.student_id。

        没有参加考试的同学:同学信息要全显示,没有匹配的成绩显示 NULL

        其它条件:sc.score is null。(注意不要用 =,null 与任意值做计算都是 null)

3、示例2:查询没有学生的班级

五、自连接

        自连接是自己跟自己做笛卡尔积。上面的连接都是列与列的比较,有时候我们想要同一列中行与行的比较,但MySQL 又不支持直接比较行与行。就需要用自连接,把行转为列。

        比如我们想要比较同一个学生的 score 字段的不同课程成绩:

1、示例1:显示所有 'Java' 比 'MySQL' 分数低的学生和成绩信息

        查询的表:score sc1、score sc2、student s。

        连接条件:sc1.student_id = sc2.student_id。同一个学生的成绩进行比较。(自连接)

                          sc1.student_id = student.id。

        其它条件:sc1.class_id = Java 的编号,sc2.class_id = MySQL 的编号。(选出对应的课程)。sc1.score < sc2.score。

2、示例2:通过课程名实现示例1

        有时候希望实现用户输入 2 个课程名称,就能直接查询的功能。所以先把 score 表与 class 表关联后,在对课程名进行筛选。

        查询的表:score sc1、class c1、score sc2、class c2。

        连接条件:sc1.class_id = c1.id(代表课程1)

                          sc2.class_id = c2.id(代表课程2)

                          sc1.student_id = sc2.student_id(代表同一个学生)

        其他条件:c1.name = 'Java', c2.name = 'MySQL'

                          sc1.score < sc2.score

六、子查询

        子查询就是一个 select 语句的结果是另一个 select 语句的条件,可以嵌套多层,也叫嵌套查询。子查询只是把多条的查询语句合并成一条查询语句,在工作中不能嵌套太多,影响查询效率。

1、语法

        in 表示内层的 select 返回的是一个结果集。

2、单行子查询。

        内层只返回一行数据

        示例:查询 '不想毕业' 的同班同学

        先要查询 '不想毕业' 是哪个班的(内层返回1行),然后根据班级 id 查询同班同学(外层)。最后排除 '不想毕业' 的信息。

3、多行子查询

        内层返回多行数据

        示例:查询 'Java' 或 'MySQL' 的成绩信息。

        先查询 'Java' 或 'MySQL' 的课程 id(返回2行),然后根据课程 id 查询成绩信息。

4、多列子查询

        内层返回多列数据,外层条件与内层查询的列要匹配

        示例:查询重复录入的分数。

        首先查询重复的成绩信息(分数、学生 id、课程 id,相同的分为一组,统计每组数据行数,计数大于1的则重复),再根据内层的查询结果在外层查询完整的成绩信息(成绩 id,分数、学生 id、课程 id)。

5、在 from 子句中使用子查询

        from 后面接查询的表,这个表可以是真实表或者临时表,而子查询的结果就是存储在临时表中。

        示例:查询大于 'Java001' 班平均分的成绩信息。

        先查找班级为 'Java001班' 的学生成绩,即将 class、score、student 关联,选出 class.name = 'Java001班' 的数据行,再求平均值,平均值存储在临时表中。

        再将平均值临时表与 score 表进行内连接,最后使用其它条件 score > avg。

七、合并查询

        想让多个 select 查询结果集一起返回,就用合并查询。

1、union(结果集去重)

        准备一个与 student 结构一致的 student2 表:

        插入数据:

insert into student2 (name, sno, age, gender, enroll_date, class_id) values
('唐三藏', '100001', 18, 1, '1986-09-01', 1),
('刘备', '300001', 18, 1, '1993-09-01', 3),
('张飞', '300002', 18, 1, '1993-09-01', 3),
('关羽', '300003', 18, 1, '1993-09-01', 3);

        student 表数据:

        

        查询 student 表中 id < 3 的学生和 student2 表中所有学生(因为 union 去重,所以唐三藏只有一条数据):

2、union all(结果集不去重)

3、注意事项

  • 单表可以使用合并语句,但是建议使用 or

  • 合并查询时,多张表的一定要对齐

八、插入查询结果

        插入的数据是查询的结果

        示例:将 student 表中 'C++001班' 的学生数据加入到 student2 表中。

        查看 student 表中 'C++001班' 的学生:

        将查询结果插入到 student2 表中(注意:不使用 values,null 表示给自增的 id 占位):

        插入后的 student2:

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

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

相关文章

图漾官网Sample_V1版本C++语言完整参考例子---单相机版本

文章目录 1.参考例子 主要梳理了图漾官网Sample_V1版本的例子 1.参考例子 主要增加了从storage区域读取相机参数的设置&#xff0c;使用图漾PercipioViewer软件&#xff0c;如何将相机参数保存到srorage区&#xff0c;可参考链接&#xff1a;保存相机参数操作 保存参数设置 注…

关于本地端口启动问题

如何启动一个本地端口 1. Node.js (使用Express框架) 使用node.js的方法 注意&#xff1a;下列bash命令最好在管理员权限运行的cmd窗口中进行&#xff0c;否则可能会有权限错误 首先&#xff0c;确保您已经安装了Node.js和npm。然后&#xff0c;创建一个新的Node.js项目并安…

产销协同的作用是什么?又如何对各部门发挥作用?

目录 一、产销协同的对象有哪些&#xff1f; 1. 客户需求 2. 市场趋势 3. 供应链伙伴 4. 企业战略目标 二、产销协同的作用是什么&#xff1f; 1. 提高客户满意度 2. 降低企业成本 3. 增强市场竞争力 4. 优化资源配置 三、产销协同对各部门怎么发挥作用&#xff1f;…

React Router v7 从入门到精通指南

一、设计思想与核心原理 1. 设计哲学 组件即路由&#xff1a;路由以 <Route> 组件形式声明&#xff0c;与 React 组件树深度集成声明式导航&#xff1a;通过 <Link> 和 useNavigate 实现无刷新路由跳转动态匹配机制&#xff1a;路径参数、通配符、优先级匹配规则…

Python爬虫实战:获取网yi新闻网财经信息并做数据分析,以供选股做参考

一、引言 在财经领域,股市信息对投资者意义重大。网yi新闻作为知名新闻资讯平台,其股市板块蕴含丰富的最新股市热点信息。然而,依靠传统人工方式从海量网页数据中获取并分析这些信息,效率低下且难以全面覆盖。因此,利用爬虫技术自动化抓取相关信息,并结合数据分析和机器…

Spring Boot Actuator - 应用监控与管理

一、 Spring Boot Actuator 概述 Spring Boot Actuator是Spring Boot 提供的生产级监控与管理工具集&#xff0c;用于实时监控和运维管理应用。Actuator 通过HTTP 端点&#xff08;或 JMX 端点&#xff09;暴露应用的健康状态、性能指标、日志信息、环境配置等关键数据&#x…

不同类型插槽的声明方法和对应的调用方式

在 Vue 3 中&#xff0c;slot 用于让组件的使用者可以向组件内部插入自定义内容。Vue 3 提供了多种声明和使用插槽的方式&#xff0c;下面为你详细介绍不同类型插槽的声明方法和对应的调用方式。 1. 匿名插槽 声明方法 在组件模板中直接使用 标签来定义匿名插槽&#xff0c;它可…

DeepSeek 联手 Word,开启办公开挂模式

目录 一、DeepSeek 与 Word 结合的神奇之处二、前期准备&#xff0c;万事俱备2.1 了解 DeepSeek2.2 确认软件版本2.3 账号与密钥获取 三、接入方法全解析3.1 OfficeAI 插件接入3.1.1 下载与安装插件3.1.2 配置 API 密钥 3.2 VBA 宏接入3.2.1 启用开发者工具3.2.2 调整信任设置3…

云钥科技红外短波工业相机

云钥科技的红外短波相机是一款基于短波红外&#xff08;SWIR&#xff0c;波长范围约1-3微米&#xff09;技术的成像设备&#xff0c;专为高精度检测、全天候成像及特殊场景应用设计。以下从核心技术、性能参数、应用场景及产品优势等方面进行详细介绍&#xff1a; ​​一、核心…

得物 小程序 6宫格 分析

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向过程 部分python代码 if result …

第十六届蓝桥杯 2025 C/C++B组 第二轮省赛 全部题解(未完结)

目录 前言&#xff1a; 试题A&#xff1a;密密摆放 试题B&#xff1a;脉冲强度之和 试题C&#xff1a;25之和 试题D&#xff1a;旗帜 试题H&#xff1a;破解信息 前言&#xff1a; 这是我后续刷到的第二轮省赛的题目&#xff0c;我自己也做了一下&#xff0c;和第一轮省赛…

conda和bash主环境的清理

好的&#xff01;要管理和清理 Conda&#xff08;或 Bash&#xff09;安装的包&#xff0c;可以按照以下步骤进行&#xff0c;避免冗余依赖&#xff0c;节省磁盘空间。 &#x1f4cc; 1. 查看已安装的包 先列出当前环境的所有安装包&#xff0c;找出哪些可能需要清理&#xff…

【Linux】服务自启动设置的方式

关于服务自启动设置的方式,本文将介绍两种方法。分别是systemd服务单元文件的配置和起容器的方式。 目录 1 systemd服务单元文件的配置 [Unit] 部分 [Service] 部分 [Install] 部分 2 docker 1 systemd

面试篇 - LoRA(Low-Rank Adaptation) 原理

1. 问题背景 大模型微调的挑战&#xff1a; 预训练模型&#xff08;如GPT-3、LLaMA&#xff09;参数量巨大&#xff08;数十亿至万亿级&#xff09;&#xff0c;直接微调所有参数&#xff1a; 计算开销大&#xff1a;需更新全部权重&#xff0c;GPU显存不足。 存储冗余&#…

Flink Docker Application Mode 命令解析

Flink官方提供的 Docker 运行 Flink Application Mode 模式&#xff0c;逐句解读含义&#xff0c;并且给予操作实例&#xff1a; 以下是 Flink 官方提供的 Docker 命令&#xff0c;用于在 Application Mode 下运行 Flink Job&#xff08;standalone-job 作为 JobManager&#…

20250427 对话1: 何东山的宇宙起源理论

对话1: 何东山的宇宙起源理论 以下内容综述了何东山团队有关宇宙起源的主要理论成果、方法体系及其学术影响。 何东山团队基于惠勒-德威特方程&#xff08;Wheeler–DeWitt Equation, WDWE&#xff09;和德布罗意–玻姆量子轨道理论&#xff0c;推导出带有额外“量子势”项的…

Python实例题:ebay在线拍卖数据分析

目录 Python实例题 题目 实现思路 代码实现 代码解释 read_auction_data 函数&#xff1a; clean_auction_data 函数&#xff1a; exploratory_analysis 函数&#xff1a; visualize_auction_data 函数&#xff1a; 主程序&#xff1a; 运行思路 注意事项 Python实…

2025年具身智能科技研报

引言 本报告系统梳理了2025年具身智能领域的最新进展&#xff0c;基于国内外权威新闻源与行业研究报告&#xff0c;通过数据可视化与深度分析相结合的方式&#xff0c;呈现该领域多维发展态势。从技术突破层面看&#xff0c;多模态大模型的突破性进展为具身智能注入新动能&…

缓存与数据库一致性深度解析与解决方案

缓存与数据库一致性深度解析与解决方案 一、一致性问题本质与挑战 1. 核心矛盾分析 缓存与数据库一致性问题源于数据存储的异步性与分布性&#xff0c;核心挑战包括&#xff1a; 读写顺序不确定性&#xff1a;并发场景下写操作顺序可能被打乱&#xff08;如先写缓存后写数据…

npm如何安装pnpm

在 npm 中安装 pnpm 非常简单,你可以通过以下步骤完成: 1. 使用 npm 全局安装 pnpm 打开终端(命令行工具),运行以下命令: npm install -g pnpm2. 验证安装 安装完成后,可以检查 pnpm 的版本以确保安装成功: pnpm --version如果正确显示版本号(如 8.x.x),说明安…