MySQL 中常用的几种连接(JOIN)方式

[复制链接]
发表于 2025-7-9 03:21:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
MySQL 中常用的几种连接(JOIN)方式
下面详细先容一下 MySQL 中常用的几种连接(JOIN)方式,以帮助你明白它们各自的特点、适用情境以及实际使用方法:

1. INNER JOIN(内连接)


  • 定义:
    INNER JOIN 返回两个表中满足连接条件(ON 子句)匹配的记录。如果某一行在任一张表中没有对应匹配,则不会出如今结果集中。实际上,当仅写 JOIN 时,MySQL 默认就是执行 INNER JOIN。
  • 使用场景:
    当你只必要两个表中都有对应数据的行时(例如:从订单表和客户表中仅返回存在订单的客户信息),内连接是首选。
  • 示例代码
    1. SELECT A.*, B.*
    2. FROM tableA AS A
    3. INNER JOIN tableB AS B ON A.id = B.aid;
    复制代码
    该查询返回 tableA 与 tableB 中,A.id 等于 B.aid 的所有记录。

2. LEFT JOIN(左外连接)


  • 定义:
    LEFT JOIN(或称 LEFT OUTER JOIN)返回左表(FROM 子句中第一个表)的所有记录,即使右表中相关联的数据不存在。如果右表没有匹配记录,其对应字段会返回 NULL。
  • 使用场景:
    当必要表现左表中的所有记录,同时希望附加右表中的信息(如果存在匹配),例如查询所有客户信息以及他们可能的订单,即使部门客户没有订单。
  • 示例代码
    1. SELECT A.*, B.*
    2. FROM tableA AS A
    3. LEFT JOIN tableB AS B ON A.id = B.aid;
    复制代码
    此查询确保了 tableA 中的每条记录都会出如今结果中,而 tableB 的数据在无匹配时表现 NULL。

3. RIGHT JOIN(右外连接)


  • 定义:
    RIGHT JOIN(或 RIGHT OUTER JOIN)与 LEFT JOIN 类似,但它返回的是右表(JOIN 子句中第二个表)的所有记录。如果左表中没有匹配,左表对应的字段将返回 NULL。
  • 使用场景:
    当业务逻辑要求必须表现右侧表中的所有记录时使用。由于通常可以通过交换左右两表的位置来用 LEFT JOIN 实现同样效果,RIGHT JOIN 相对较少使用。
  • 示例代码:
    1. SELECT A.*, B.*
    2. FROM tableA AS A
    3. RIGHT JOIN tableB AS B ON A.id = B.aid;
    复制代码
    该查询确保 tableB 中的每条记录都表现出来,而 tableA 中没有匹配的部门以 NULL 填充。

4. FULL OUTER JOIN(全外连接)


  • 定义:
    FULL OUTER JOIN 会返回两个表中所有的记录,也就是说,不仅返回匹配的部门,还会返回左表或右表中没有匹配的记录,并用 NULL 填充缺失部门。必要留意的是,MySQL 不直接支持 FULL OUTER JOIN。
  • 使用场景与实现方法:
    如果必要获取两个表中所有数据,可以采用 LEFT JOIN 和 RIGHT JOIN 的 UNION 利用来实现全外连接:
    1. SELECT A.*, B.*FROM tableA AS ALEFT JOIN tableB AS B ON A.id = B.aidUNIONSELECT A.*, B.*
    2. FROM tableA AS A
    3. RIGHT JOIN tableB AS B ON A.id = B.aid;
    复制代码
    这种方法可以返回两个表中所有记录,不过在大数据量时可能会有性能影响,必要进一步优化。

小结与留意事项


  • 默认行为:
    不写限定关键字的 JOIN 默以为 INNER JOIN,即只返回两个表中都有匹配的记录。
  • 选择机遇:

    • INNER JOIN:用于只必要匹配数据的场景。
    • LEFT JOIN:包管左侧表中所有数据均表现;右侧表无匹配数据时,字段返回 NULL。
    • RIGHT JOIN:包管右侧表中所有数据均表现(实际应用中可通过交换表次序转换为 LEFT JOIN);
    • FULL OUTER JOIN:返回所有数据,但 MySQL 必要通过 UNION 实现。

  • 性能考虑:
    在涉及多个大表连接时,发起对连接字段设置索引,确保查询高效并降低内存占用。并且在操持 SQL 查询时,清晰了解各类 JOIN 的执行机制有助于优化查询性能
这些连接方式的详细表现往往可以用 Venn 图来直观阐明,好比 INNER JOIN 只包含两个表的交集,而 LEFT JOIN 则是左表的全集与右表的交集,右部门没有匹配部门则表现为空值。
各位在实际项目中选择合适的 JOIN 范例时,发起根据数据完整性和业务需求进行权衡。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复

使用道具 举报

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5

GMT+8, 2025-7-25 07:48 , Processed in 0.075253 second(s), 30 queries 手机版|qidao123.com技术社区-IT企服评测▪应用市场 ( 浙ICP备20004199 )|网站地图

快速回复 返回顶部 返回列表