跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

SQL多表连接入门说明_SQL JOIN类型与用法解析

SQL多表连接核心在于明确保留哪边数据及处理不匹配情况:INNER JOIN仅保留两边均有匹配的记录;LEFT JOIN保留左表全部记录,右表无匹配则填NULL;RIGHT JOIN与FULL JOIN使用较少,MySQL不支持FULL JOIN;自连接需用别名区分同一表的不同角色,多表连接应逐级明确ON条件。

SQL多表连接的核心,是通过关联字段把不同表的数据拼在一起查。关键不在记住所有JOIN名称,而在于理解“要保留哪边的数据”和“匹配不上怎么办”这两个问题。

INNER JOIN:只留两边都有的记录这是最常用的连接方式,结果中每行数据在左表和右表里都必须有对应匹配项。如果某条订单没有对应的客户信息,这条订单就不会出现在结果里。

写法简洁:可直接写JOIN,默认就是 INNER JOIN条件写在ON后面,不是 WHERE(WHERE 是连接完再过滤)

字段名重复时,必须用表名.字段名明确指定,比如orders.user_id和users.id LEFT JOIN:左边全保留,右边没匹配就填 NULL想看所有用户,不管他们有没有下过订单,就用 LEFT JOIN。左表(users)的每一行都会出现,右表(orders)没匹配上的字段显示为 NULL。

LEFT 可以换成LEFT OUTER JOIN,效果一样,“OUTER”通常省略

注意方向:

FROM users LEFT JOIN orders表示以 users 为主如果后续加 WHERE 条件筛右表字段(如 WHERE orders.status = 'paid'),会把原本 NULL 的行也过滤掉——需要改成AND orders.status = 'paid'放在 ON 后面才对RIGHT JOIN 和 FULL JOIN:用得少,但逻辑要清楚RIGHT JOIN 就是 LEFT JOIN 换个方向,日常几乎不用,因为改写成 LEFT JOIN 更直观。FULL JOIN 返回左右两边所有记录,匹配不上的补 NULL,MySQL 不支持,PostgreSQL、SQL Server、Oracle 可用。

MySQL(Linux)

MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。

下载MySQL 用户想实现类似 FULL JOIN 效果,得用LEFT JOIN + RIGHT JOIN + UNION拼接实际业务中,FULL JOIN 使用场景有限,多数时候用 LEFT 或 INNER 就够了自连接和多表连接:一次查多个表不难一张表可以自己连自己,比如查员工和直属上级的名字(都存在 employee 表里)。多表连接就是连续写 JOIN,每次 ON 一个关联条件。

自连接要给表起别名,比如e1 AS employee和e2 AS manager三张表连接:FROM a JOIN b ON a.id = b.a_id JOIN c ON b.id = c.b_id别让 ON 条件串错关系,建议一边写一边画字段对应关系基本上就这些。JOIN 不复杂但容易忽略细节,重点是动手试,用小数据验证结果是否符合预期。

相关文章