RIGHT JOIN 返回右表所有记录及左表匹配记录,不匹配时左表字段为NULL;等价于RIGHT OUTER JOIN,执行时遍历右表并查找左表匹配行,常用于保留右表全部数据的场景。
MySQL 中的 RIGHT JOIN 用于返回右表(即 JOIN 右侧的表)中的所有记录,以及左表中与之匹配的记录;如果左表没有匹配项,则对应字段为 NULL。
RIGHT JOIN 等价于 RIGHT OUTER JOIN,关键词 OUTER 可省略。其执行顺序是:先遍历右表的每一行,再尝试在左表中查找满足 ON 条件的匹配行。
LEFT JOIN 的本质区别
RIGHT JOIN 和 LEFT JOIN 在功能上完全可互换,只是书写视角不同。例如:
SELECT * FROM A RIGHT JOIN B ON A.id = B.a_id;
等价于
SELECT * FROM B LEFT JOIN A ON A.id = B.a_id;
实际开发中,多数人习惯用 LEFT JOIN 表达“以某表为主”,所以 RIGHT JOIN 使用频率较低,但理解它有助于读懂他人代码或处理特定建模场景。
假设有一张 orders 表(订单)和一张 customers 表(客户),部分订单可能暂无客户信息(如游客下单):
SELECT c.name, o.order_no FROM customers c RIGHT JOIN orders o ON c.id = o.customer_id;
该语句会列出所有订单,并附带对应的客户姓名;若某订单 customer_id 为空或找不到客户,c.name 就是 NULL,但该订单仍会显示。
RIGHT JOIN 容易因表顺序写反导致结果不符合预期,尤其在多表连接中。建议注意以下几点: