SQL多表连接核心在于明确保留哪边数据及处理不匹配情况:INNER JOIN仅保留两边均有匹配的记录;LEFT JOIN保留左表全部记录,右表无匹配则填NULL;RIGHT JOIN与FULL JOIN使用较少,MySQL不支持FULL JOIN;自连接需用别名区分同一表的不同角色,多表连接应逐级明确ON条件。
SQL多表连接的核心,是通过关联字段把不同表的数据拼在一起查。关键不在记住所有JOIN名称,而在于理解“要保留哪边的数据”和“匹配不上怎么办”这两个问题。
这是最常用的连接方式,结果中每行数据在左表和右表里都必须有对应匹配项。如果某条订单没有对应的客户信息,这条订单就不会出现在结果里。
想看所有用户,不管他们有没有下过订单,就用 LEFT JOIN。左表(users)的每一行都会出现,右表(orders)没匹配上的字段显示为 NULL。
RIGHT JOIN 就是 LEFT JOIN 换个方向,日常几乎不用,因为改写成 LEFT JOIN 更直观。FULL JOIN 返回左右两边所有记录,匹配不上的补 NULL,MySQL 不支持,PostgreSQL、SQL Server、Oracle 可用。
LEFT JOIN + RIGHT JOIN + UNION 拼接一张表可以自己连自己,比如查员工和直属上级的名字(都存在 employee 表里)。多表连接就是连续写 JOIN,每次 ON 一个关联条件。
基本上就这些。JOIN 不复杂但容易忽略细节,重点是动手试,用小数据验证结果是否符合预期。