Skip to main content

MySQL右连接的实例说明

MySQL右连接子句简介

MySQL右联接与左联接类似,只是联接表的处理方式相反。

下面是两个表t1和t2的右连接语法:

SELECT 
select_list
FROM t1
RIGHT JOIN t2 ON
join_condition;

在这种语法中:

如果join_条件使用相等运算符(=),并且两个表的联接列具有相同的名称,则可以使用如下USING语法:

SELECT 
select_list
FROM t1
RIGHT JOIN t2 USING(column_name);

因此,以下连接条件是等效的:

ON t1.column_name = t2.column_name

USING (column_name);

正确的连接是如何工作的。

右连接开始从右表(t2)中选择数据。它将右表中的每一行与左表中的每一行相匹配。如果这两行都导致联接条件的计算结果为TRUE,则右联接会将这些行的列合并到新行中,并将该新行包含在结果集中。

如果右表中的一行没有左表中的匹配行,则右联接将右表中的行列与右表中所有列的空值合并到一个新行中,并将该行包含在结果集中。

换句话说,右连接返回右表中的所有行,而不管左表中是否有匹配的行。

需要强调的是,RIGHT JOIN和LEFT JOIN子句在功能上是等价的,只要表顺序颠倒,它们就可以相互替换。

请注意,右外连接是右连接的同义词。因此,您可以互换使用它们。

MySQL右连接子句示例

我们将使用示例数据库中的员工和客户表进行演示:

customers表中的salesRepEmployeeNumber列链接到employeeNumber表中的employeeNumber列。

销售代表或员工可能负责零个或多个客户。每个客户都由零名或一名销售代表负责。

如果salesRepEmployeeNumber列中的值为空,则表示该客户没有任何销售代表。

1) 简单的MySQL右连接示例

此语句使用RIGHT JOIN子句将表customers与表employees连接起来。

SELECT 
employeeNumber,
customerNumber
FROM
customers
RIGHT JOIN employees
ON salesRepEmployeeNumber = employeeNumber
ORDER BY
employeeNumber;

MySQL RIGHT JOIN example

在本例中:

2) 使用MySQL右连接查找不匹配的行

以下语句使用RIGHT JOIN子句查找不负责任何客户的员工:

SELECT 
employeeNumber,
customerNumber
FROM
customers
RIGHT JOIN employees ON
salesRepEmployeeNumber = employeeNumber
WHERE customerNumber is NULL
ORDER BY employeeNumber;

MySQL RIGHT JOIN - find unmatching rows

总结