📅  最后修改于: 2020-11-18 03:19:46             🧑  作者: Mango
右联接用于联接两个或多个表,并返回右表的所有行,并且仅返回满足联接条件的另一个表的结果。如果从左侧表中找到不匹配的记录,则返回Null值。它类似于“左联接”,但它给出联接表的相反结果。也称为“右外部连接”。因此,Outer是与Right Join一起使用的可选子句。
我们可以通过以下可视化表示来理解它,其中Right Outer Join返回左侧表中的所有记录,而仅返回另一个表中的匹配记录:
以下是连接表Table1和Table2的右连接的语法:
SELECT column_list
FROM Table1
RIGHT [OUTER] JOIN Table2
ON join_condition;
注意:在右连接中,如果表包含相同的列名,则ON和USING子句将给出等效的结果。
让我们看看“ Right Join”如何工作。
此联接开始从右侧表中选择列,并与左侧表中的该表的每个记录匹配。如果两个记录均满足给定的连接条件,则它将所有行合并到一个新的行集中,并将其作为输出返回。如果右侧表的行找不到与左侧表匹配的行,则会将右侧表中的行与Null值合并。这意味着,Right Join返回右侧表中的所有数据(无论它是否匹配左侧表中的行)。
让我们举一些例子来了解Right Join子句的工作原理:
在这里,我们将创建两个包含以下数据的表“ customers”和“ orders”:
表:客户
表:订单
要使用RIGHT JOIN从两个表中选择记录,请执行以下查询:
SELECT customers.customer_id, cust_name, price, date
FROM customers
RIGHT JOIN orders ON customers.customer_id = orders.customer_id
ORDER BY customer_id;
要么,
SELECT customers.customer_id, cust_name, price, date
FROM customers
RIGHT JOIN orders USING(customer_id)
ORDER BY customer_id;
成功执行以上查询后,它将给出等效的输出:
MySQL使用WHERE子句从表中提供过滤结果。下面的示例通过Right Join子句对此进行了说明:
SELECT * FROM customers
RIGHT JOIN orders USING(customer_id)
WHERE price>2500 AND price<5000;
该语句给出以下结果:
我们已经创建了两个表,分别为“ customers”和“ orders”。让我们再创建一个表,并将其命名为包含以下数据的“联系人”:
执行以下语句以加入三个表的客户,订单和联系人:
SELECT customers.customer_id, cust_name, order_id, price, cellphone
FROM customers
RIGHT JOIN contacts ON customer_id = contact_id
RIGHT JOIN orders ON customers.customer_id = orders.customer_id ORDER BY order_id;
成功执行以上查询后,将给出以下输出:
在这种情况下,当我们想要获取表中不包含来自另一个表的任何匹配数据行的记录时,Right Join子句也很有用。
我们可以通过以下使用RIGHT JOIN子句来查找没有手机号码的客户的示例来理解它:
SELECT customer_id, cust_name, cellphone, homephone
FROM customers
RIGHT JOIN contacts ON customer_id = contact_id
WHERE cellphone IS NULL
ORDER BY cellphone;
上面的语句返回以下输出: