news 2026/7/10 14:13:11

【数据库】【MySQL】各种 JOIN 的特点及应用场景

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【数据库】【MySQL】各种 JOIN 的特点及应用场景

MySQL 各种 JOIN 的特点及应用场景

MySQL 中的 JOIN 操作用于将多个表中的数据关联起来,常见的 JOIN 类型包括 INNER JOIN、LEFT JOIN、RIGHT JOIN 和 FULL JOIN(MySQL 不直接支持 FULL JOIN,但可通过 UNION 实现)。以下是它们的特点及典型应用场景。

JOIN 类型总览表

JOIN 类型结果集特征驱动表性能应用场景
INNER JOIN两表匹配的行小表驱动最快90% 场景,标准关联查询
LEFT JOIN左表全部+ 右表匹配强制左表驱动中等保留主表全部记录(如用户+订单)
RIGHT JOIN右表全部+ 左表匹配强制右表驱动中等极少使用(可用 LEFT JOIN 改写)
FULL OUTER JOIN两表全部(MySQL 不支持)MySQL 用UNION模拟
CROSS JOIN笛卡尔积(两表所有组合)极慢生成组合数据、报表
SELF JOIN表自关联自身中等层级数据(组织架构、评论回复)
INNER JOIN

特点
INNER JOIN 返回两个表中满足连接条件的行。如果某行在其中一个表中没有匹配项,则不会出现在结果中。

应用场景

  • 需要获取两个表中完全匹配的数据。例如,查询订单和订单详情表中同时存在的记录。
  • 数据清洗时,剔除无效或不完整的记录。

示例

SELECTorders.order_id,customers.customer_nameFROMordersINNERJOINcustomersONorders.customer_id=customers.customer_id;
LEFT JOIN (LEFT OUTER JOIN)

特点
LEFT JOIN 返回左表中的所有行,即使右表中没有匹配的行。右表中无匹配的列会显示为 NULL。

应用场景

  • 需要获取左表全部数据,同时关联右表的可选信息。例如,查询所有客户及其订单(即使某些客户没有订单)。
  • 统计左表数据时,避免因右表无匹配而丢失左表记录。

示例

SELECTcustomers.customer_name,orders.order_idFROMcustomersLEFTJOINordersONcustomers.customer_id=orders.customer_id;
RIGHT JOIN (RIGHT OUTER JOIN)

特点
RIGHT JOIN 返回右表中的所有行,即使左表中没有匹配的行。左表中无匹配的列会显示为 NULL。

应用场景

  • 需要获取右表全部数据,同时关联左表的可选信息。例如,查询所有订单及其客户信息(即使某些订单关联的客户已删除)。
  • 优先展示右表数据时使用。

示例

SELECTorders.order_id,customers.customer_nameFROMordersRIGHTJOINcustomersONorders.customer_id=customers.customer_id;
FULL JOIN (通过 UNION 模拟)

特点
FULL JOIN 返回左表和右表中的所有行,无匹配的列显示为 NULL。MySQL 不直接支持 FULL JOIN,但可通过 LEFT JOIN 和 RIGHT JOIN 的 UNION 实现。

应用场景

  • 需要合并两个表的所有数据,无论是否有匹配。例如,合并两个数据源的完整记录。

示例

SELECTcustomers.customer_name,orders.order_idFROMcustomersLEFTJOINordersONcustomers.customer_id=orders.customer_idUNIONSELECTcustomers.customer_name,orders.order_idFROMcustomersRIGHTJOINordersONcustomers.customer_id=orders.customer_id;
CROSS JOIN

特点
CROSS JOIN 返回两个表的笛卡尔积,即左表的每一行与右表的每一行组合。不依赖连接条件。

应用场景

  • 需要生成所有可能的组合。例如,生成测试数据或计算乘积关系。

示例

SELECTproducts.product_name,colors.color_nameFROMproductsCROSSJOINcolors;
自连接 (Self JOIN)

特点
自连接是表与自身的 JOIN 操作,通常用于层级数据查询(如员工与经理的关系)。

应用场景

  • 处理同一表内的关联关系。例如,查询员工及其上级经理。

示例

SELECTe1.employee_name,e2.employee_nameASmanager_nameFROMemployees e1LEFTJOINemployees e2ONe1.manager_id=e2.employee_id;

选择 JOIN 类型的建议

  • 精确匹配:使用 INNER JOIN。
  • 保留主表全部数据:使用 LEFT JOIN 或 RIGHT JOIN。
  • 合并所有数据:通过 UNION 模拟 FULL JOIN。
  • 避免性能问题:确保连接字段有索引,尤其在大表操作时。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/10 13:13:40

网络安全领域:HW_行动(国家网络安全攻防演练)是什么?

【指南】网络安全领域:HW 行动(国家网络安全攻防演练)是什么? 网络安全领域,“HW 行动” (网络安全实战攻防演练)作为国家层面组织的网络安全攻防演练,是我国提升关键信息基础设施安…

作者头像 李华
网站建设 2026/7/10 12:27:37

计算机毕业设计 | SSM 校园线上订餐系统 外卖购物网站(附源码)

1, 概述 1.1 项目背景 传统的外卖方式就是打电话预定,然而,在这种方式中,顾客往往通过餐厅散发的传单来获取餐厅的相关信息,通过电话来传达自己的订单信息,餐厅方面通过电话接受订单后,一般通…

作者头像 李华
网站建设 2026/7/9 16:10:04

Elasticsearch:使用判断列表评估搜索查询相关性

作者:来自 Elastic Jhon Guzmn 探索如何构建 判断列表(judgment lists) 来客观评估搜索查询相关性,并改进例如 recall 等性能指标,以实现 Elasticsearch 中可扩展的搜索测试。 Elasticsearch 充满了新功能,…

作者头像 李华
网站建设 2026/7/10 11:19:06

springboot基于vue的车辆挡泥板机器人工厂管理系统_43qfa4ie

目录 已开发项目效果实现截图开发技术系统开发工具: 核心代码参考示例1.建立用户稀疏矩阵,用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式&am…

作者头像 李华
网站建设 2026/7/10 5:38:27

如何在 Kuscia 中使用自定义镜像仓库

打开链接即可点亮社区Star,照亮技术的前进之路。 Github 地址:https://github.com/secretflow/kuscia Kuscia支持自动拉取远程的应用镜像(比如:SecretFlow 等),这样可以不用手动导入镜像到容器中。可以在…

作者头像 李华