MySQL RIGHT JOIN子句

时间:2019-11-20 08:52:05  来源:igfitidea点击:

简介:在本教程中,您将学习如何使用MySQL RIGHT JOIN从两个表中查询数据。

MySQL RIGHT JOIN子句简介

MySQL RIGHT JOIN与LEFT JOIN相似,除了对联接表的处理相反。

这是两个表t1和t2的RIGHT JOIN的语法:

SELECT 
    select_last
FROM t1
RIGHT JOIN t2 ON 
    join_condition;

使用以下语法:

  • t1是左表,t2是右表
  • join_condition指定匹配两个表中的行的规则。

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

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

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

ON t1.column_name = t2.column_name

USING (column_name);

RIGHT JOIN的工作方式。

RIGHT JOIN开始从右表(t2)中选择数据。
它匹配右表中的每一行与左表中的每一行。
如果两行都导致联接条件的值为TRUE,则它将列合并为新行,并将新行包括在结果集中。

如果右表中的行没有左表中的匹配行,则它将右表中的行的列与右表中所有列的NULL值合并为新行,并将该行包括在结果集中。

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

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

注意,RIGHT OUTER JOIN是RIGHT JOIN的同义词。

MySQL RIGHT JOIN示例

我们将使用示例数据库中的employees和customers表进行演示:

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

销售代表或员工可以负责零个或多个客户。
每个客户由零个或一个销售代表来照顾。

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

1)简单的MySQL RIGHT JOIN示例

该语句使用RIGHT JOIN子句将表客户与表雇员连接在一起。

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

在此示例中:

  • RIGHT JOIN返回表雇员的所有行,无论表雇员中的行在表客户的salesRepEmployeeNumber列中是否具有匹配值。

  • 如果表employees中的一行与表customers中没有匹配的行,则RIGHT JOIN对customerNumber列使用NULL。

2)使用MySQL RIGHT JOIN查找不匹配的行

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

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

在本教程中,您学习了如何使用MySQL RIGHT JOIN从两个表中查询数据。