news 2026/4/18 14:23:26

【数据库】【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/4/17 23:57:46

从“录像工具”到“智能管家”:家用摄像头升级背后的技术密码

一、前言“以前的家用摄像头从“本地存储历史回看”两个功能,到如今的智能摄像头——通过手机APP就能远程实时查看画面、与家人双向对话,历史录像安全存于云端随时调取,甚至能主动推送异常告警,自动剪辑孩子学步或宠物玩耍的“高光…

作者头像 李华
网站建设 2026/4/18 3:24:55

永磁同步电机非线性磁链观测器_源代码 matlab模型 零速闭环启动效果好,快速收敛, 低速效...

永磁同步电机非线性磁链观测器_源代码 matlab模型 零速闭环启动效果好,快速收敛, 低速效果好,扭力大,优于VESC。 基于改进Ortega观测器的内置式永磁同步电机无位置控制直接上干货。今天聊的这个非线性磁链观测器有点意思——零速硬…

作者头像 李华
网站建设 2026/4/17 8:44:04

多工厂协同的“指挥官”:APS系统如何让生产计划跑得更快?

高级计划排程(Advanced Planning and Scheduling, APS)系统在多工厂协同中的运用,能够显著提升制造企业的整体运营效率、资源利用率和交付能力。特别是在汽车制造、电子、物流等多工厂分散布局的企业中,通过APS系统实现全局统筹、…

作者头像 李华
网站建设 2026/4/17 8:44:07

72、Mac OS X 与旧系统功能对比及 Windows 转 Mac OS X 功能指引

Mac OS X 与旧系统功能对比及 Windows 转 Mac OS X 功能指引 一、Mac OS 9 到 Mac OS X 的功能变化 (一)安全与文件相关功能 Security :在 Mac OS 9 中,Security 文件夹是 Apple File Security 和 Apple Verifier 这两个程序的所在之处,它们可使用 Finder 的 Encrypt …

作者头像 李华
网站建设 2026/4/16 18:27:04

springboot基于vue的餐厅点餐小程序的设计与实现_2f922i3k

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

作者头像 李华