【Java 进阶篇】MySQL 多表查询详解

news2024/11/25 8:16:51

在这里插入图片描述

MySQL 是一个强大的关系型数据库管理系统,多表查询是数据库操作中的重要部分之一。多表查询允许您从多个表中检索和操作数据,以满足复杂的数据需求。本文将介绍 MySQL 多表查询的基本概念、语法和示例,以及一些常见的多表查询场景。

什么是多表查询?

在关系型数据库中,数据通常分散在多个表中,而不是存储在单个表中。多表查询是指从一个以上的表中检索数据并将其组合以满足特定需求的操作。通过多表查询,您可以执行以下操作:

  • 检索与多个表关联的数据。
  • 在多个表之间建立关联,以便于数据分析。
  • 聚合和计算多个表中的数据。
  • 更新和删除多个表中的数据。

多表查询通常涉及使用 JOIN 子句将不同的表连接在一起,以创建一个包含所需数据的结果集。

多表查询的基本语法

在 MySQL 中,使用 JOIN 子句来执行多表查询。JOIN 子句用于将两个或多个表中的行组合在一起,以创建一个包含来自这些表的数据的结果集。基本的 JOIN 子句语法如下:

SELECT 列名
FROM1
JOIN2
ON1.=2.;

其中:

  • SELECT 语句指定要检索的列。
  • 表1表2 是要连接的表。
  • ON 子句指定连接条件,即哪些列应该匹配以创建连接。

下面是一个简单的示例,演示如何从两个表中检索数据:

SELECT orders.order_id, customers.customer_name
FROM orders
JOIN customers
ON orders.customer_id = customers.customer_id;

在此示例中,我们从名为 orderscustomers 的两个表中检索数据,并根据 customer_id 列将它们连接在一起。

不同类型的 JOIN

MySQL 支持不同类型的 JOIN 操作,用于满足不同的数据需求。以下是一些常见的 JOIN 类型:

  1. INNER JOIN:INNER JOIN 返回两个表中匹配的行,并且只返回匹配的行。如果两个表中没有匹配的行,则不返回任何结果。

  2. LEFT JOIN(或 LEFT OUTER JOIN):LEFT JOIN 返回左表中的所有行以及右表中与左表匹配的行。如果右表中没有匹配的行,则返回 NULL 值。

  3. RIGHT JOIN(或 RIGHT OUTER JOIN):RIGHT JOIN 与 LEFT JOIN 相反,它返回右表中的所有行以及左表中与右表匹配的行。如果左表中没有匹配的行,则返回 NULL 值。

  4. FULL JOIN(或 FULL OUTER JOIN):FULL JOIN 返回两个表中的所有行,如果没有匹配的行,则返回 NULL 值。

  5. CROSS JOIN:CROSS JOIN 返回两个表的笛卡尔积,即左表中的每一行与右表中的每一行组合在一起。

示例:多表查询的常见场景

场景 1:检索订单和客户信息

假设您有两个表,一个包含订单信息,另一个包含客户信息。您想要检索每个订单以及与之相关联的客户信息。这是一个典型的 INNER JOIN 示例:

SELECT orders.order_id, customers.customer_name
FROM orders
JOIN customers
ON orders.customer_id = customers.customer_id;

场景 2:查找没有订单的客户

有时您可能需要查找没有下订单的客户。使用 LEFT JOIN 可以找到这些客户:

SELECT customers.customer_id, customers.customer_name
FROM customers
LEFT JOIN orders
ON customers.customer_id = orders.customer_id
WHERE orders.customer_id IS NULL;

在这个查询中,我们使用了 LEFT JOIN 来获取所有客户信息,然后使用 WHERE 子句来过滤掉那些在 orders 表中没有匹配订单的客户。

场景 3:计算每个类别的平均价格

假设您有两个表,一个包含产品信息,另一个包含产品类别信息。您想要计算每个产品类别的平均价格。这可以通过使用 GROUP BY 和聚合函数来实现:

SELECT categories.category_name, AVG(products.price) AS avg_price
FROM categories
JOIN products
ON categories.category_id = products.category_id
GROUP BY categories.category_name;

在这个查询中,我们首先将 categories 表和 products 表连接在一起,然后使用 GROUP BY 子句按类别名称分组。最后,我们使用 AVG 函数计算每个类别的平均价格。

场景 4:更新多个表中的数据

有时候您需要更新多个表中的数据。例如,您可能需要更新订单表和产品表中的信息以反映价格的变化。这可以使用多个 UPDATE 语句来完成,每个 UPDATE 语句更新一个表。

-- 更新订单表中的价格
UPDATE orders
JOIN products
ON orders.product_id = products.product_id
SET orders.price = products.price;

-- 更新产品表中的价格
UPDATE products
JOIN orders
ON products.product_id = orders.product_id
SET products.price = orders.price;

在这个示例中,我们首先将订单表和产品表连接在一起,然后使用两个 UPDATE 语句分别更新订单表和产品表中的价格。

总结

MySQL 多表查询是处理关系型数据库中复杂数据需求的重要工具。通过了解不同类型的 JOIN 操作以及如何编写多表查询语句,您可以执行各种复杂的数据操作,包括数据检索、聚合、更新和删除。在进行多表查询时,请确保理解每个表之间的关系,并选择适当的 JOIN 类型以满足您的需求。希望本文能够帮助您更好地理解和应用 MySQL 多表查询。

作者信息

作者 : 繁依Fanyi
CSDN: https://techfanyi.blog.csdn.net
掘金:https://juejin.cn/user/4154386571867191

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

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

相关文章

PC版企业微信逆向之消息发送CALL-找不到参数文本消息内容,但是确定这就是消息发送CALL

现在遇到的问题是消息内容-如何查看通过esi里面的消息内容,找不到有效的 找不到参数文本消息内容,但是确定这就是消息发送CALL 消息发送call特征码为8d 47 08 50 56 e8 ?? ?? ?? ?? 8b 07 //消息发送CALL如下 **02852932 8B07 mov eax,dword ptr…

进度条程序的编写

目录 回车换行和换行的区别 倒计时程序 进度条程序 进度条代码的优化 version2 进度条代码的优化version3 在编写进度条程序之前我们需要先了解一个概念:回车换行和换行的区别。 回车换行和换行的区别 刚听到的时候会很好奇,回车换行和换行有什么区别吗&…

【数据结构】树、二叉树的概念和二叉树的顺序结构及实现

目录 前言:一、树的概念及结构1.树的概念2.树的相关概念3.树的存储4.树在实际中的运用 二、二叉树概念及结构1.概念2.特殊的二叉树(1)满二叉树(2)完全二叉树 3.二叉树的性质4.二叉树的存储(1)顺序存储(2)链式存储 三、…

山西电力市场日前价格预测【2023-09-30】

日前价格预测 预测说明: 如上图所示,预测明日(2023-09-30)山西电力市场全天平均日前电价为267.99元/MWh。其中,最高日前电价为485.05元/MWh,预计出现在18: 45。最低日前电价为0.00元/MWh,预计出…

手机搜狗输入法,输入拼音时如何分割拼音,调出“分词“功能,如何微信或QQ使用发送按钮而不是换行?

背景 有时候打字,输入 “xian” 的时候我们的意图是 “xi’an” (西安),或者输入 “yue” 的时候希望是 “yu’e”(余额) 如何输入这个分隔符 ’ 呢? 设置方法 默认页面如图 希望设置成 点…

python安装第三方模块方法

正常情况下安装python第三方模块没啥说的,但是由于python安装模块默认是在外网下载安装,牵扯外网网速问题,所以可以配置下使用国内某镜像源来下载模块 python -m pip install xxxxxxxxxxx 和 pip install xxxxxxxxxx 的命令都可下载安装第三…

Junit单元测试为什么不能有返回值?

这个问题的产生来源于我们老师上节课说的我们班一个男生问他的想法,刚开始听到这个还觉得挺有意思,我之前使用单元测试好像下意识的就将它的返回值写为void,一般都是进行简单的测试,也从没思考过在某个单元测试中调用另一个单元测试&#xff…

2023年【起重信号司索工(建筑特殊工种)】考试总结及起重信号司索工(建筑特殊工种)模拟考试题

题库来源:安全生产模拟考试一点通公众号小程序 起重信号司索工(建筑特殊工种)考试总结是安全生产模拟考试一点通生成的,起重信号司索工(建筑特殊工种)证模拟考试题库是根据起重信号司索工(建筑特殊工种)最新版教材汇编出起重信号司索工(建筑特殊工种)仿…

Muduo网络库之Channel、EPollPoller与EventLoop类【深度解析】

文章目录 前言一、Channel类1、主要成员变量以及函数2、实现原理 二、EPollPoller类1、实现原理 二、EventLoop类1、功能实现SubReactorde的唤醒操作 前言 重新梳理一遍muduo网络库的类与知识点。 Channel、EPollPoller与EventLoop类是muduo库最重要的基础, 他们三…

python-切换镜像源和使用PyCharm进行第三方开源包安装

文章目录 前言python-切换镜像源和使用PyCharm进行第三方开源包安装1. 切换镜像源2. 使用PyCharm进行第三方开源包安装 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。   而且听说点赞的人每…

【Java 进阶篇】MySQL多表查询:内连接详解

MySQL是一种强大的关系型数据库管理系统,允许您在多个表之间执行复杂的查询操作。本文将重点介绍MySQL中的多表查询中的一种重要类型:内连接(INNER JOIN)。内连接用于检索满足两个或多个表之间关联条件的行,它能够帮助…

【Leetcode】 501. 二叉搜索树中的众数

给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。 如果树中有不止一个众数,可以按 任意顺序 返回。 假定 BST 满足如下定义&#xf…

严重影响Windows使用体验的一些建议

1内存不够用:通过观察我发现我的电脑已经评价到了90%的内存使用率 没有内存什么程序运行起来都会卡的,所以一定要把不用的PROGRAME给他删除掉。特别是那些自动启动的软件,如果实在不行,就把杀毒也给他卸载掉。 不良具体表现&…

人物重识别(ReID):AaP-ReID: Improved Attention-Aware Person Re-identification

论文作者:Vipin Gautam,Shitala Prasad,Sharad Sinha 作者单位:Indian Institute of Technology Goa 论文链接:http://arxiv.org/abs/2309.15780v1 内容简介: 1)方向:人物重识别(ReID&#…

Acer宏碁笔记本暗影骑士轻刃AN715-51原装出厂Windows10系统工厂模式镜像

系统自带所有驱动、NITROSENSE风扇键盘灯控制中心、Office办公软件、出厂主题壁纸、系统属性Acer宏基专属的LOGO标志、 Acer Care Center、Quick Access等预装程序 下载链接:https://pan.baidu.com/s/1FDCP5EONlk0o12CYFXbhrg?pwdvazt 所需要工具:32G…

word 多级目录的问题

一、多级标题自动编号 --> 制表符 -> 空格 网址: 【Word技巧】2 标题自动编号——将多级列表链接到样式 - YouTube 二、多级列表 --> 正规形式编号 网址:Word 教学 - 定框架:文档格式与多级标题! - YouTube 三、目…

2023年【安徽省安全员C证】模拟考试题及安徽省安全员C证实操考试视频

题库来源:安全生产模拟考试一点通公众号小程序 2023年【安徽省安全员C证】模拟考试题及安徽省安全员C证实操考试视频,包含安徽省安全员C证模拟考试题答案和解析及安徽省安全员C证实操考试视频练习。安全生产模拟考试一点通结合国家安徽省安全员C证考试最…

力扣:113. 路径总和 II(Python3)

题目: 给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 来源:力扣(LeetCode) 链接:力扣(…

Netty(三)NIO-进阶

Netty进阶 1. 粘包与半包 1.1 粘包现象 //client端分10次每次发送16字节数据 public void channelActive(ChannelHandlerContext ctx) {for (int i 0; i < 10; i) {ByteBuf buf ctx.alloc().buffer(16);buf.writeBytes(new byte[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …

【嵌入式 – GD32开发实战指南(ARM版本)】第2部分 外设篇 - 第1章 温湿度传感器DHT11

1 理论分析 1.1 DHT11介绍 DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性。 DHT11传感器包括一个电阻式感湿元件和一个 NTC 测温元件,并与一个高性能…