news 2026/10/27 1:18:53

【数据库】【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/10/26 18:34:49

ZYNQ7000裸机环境下LWIP的UDP通信实现:关键函数与BSP配置指南

ZYNQ7000裸机环境下LWIP的UDP通信实现:关键函数与BSP配置指南 在ZYNQ7000系列SoC的裸机环境中,基于LWIP协议栈实现UDP通信需要完成两个核心任务:BSP包的正确配置与关键函数的有序调用。以下是经过验证的完整实现方案,结合Xilinx官…

作者头像 李华
网站建设 2026/10/26 6:35:27

Qwen2.5本地部署实测:Ollama与vLLM全方位对比指南

Qwen2.5本地部署实测:Ollama与vLLM全方位对比指南 引言:为什么选择本地部署Qwen2.5? 最近,通义千问团队发布的Qwen2.5系列模型引起了广泛关注。最令人瞩目的Qwen2.5-72B在多个基准测试中表现优异,甚至在某些任务上超越…

作者头像 李华
网站建设 2026/10/27 2:17:43

Linux 之 Page Cache

参考链接: https://blog.csdn.net/21cnbao/article/details/80458173 https://github.com/tobert/pcstat https://www.brendangregg.com/blog/2014-12-31/linux-page-cache-hit-ratio.html TestDFSIO Benchmark 命中率情况 以下是 2TB,在 3个 node 上的测试结果。 728G #…

作者头像 李华
网站建设 2026/10/25 23:41:18

springboot基于vue的公安案件信息共享系统的设计与实现_i1g5cv6v

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

作者头像 李华