MySQL 右连接
Right Join用于连接两个或多个表,并返回右侧表中的所有行,以及满足连接条件的其他表的结果。如果它在左侧表中找到不匹配的记录,则返回Null值。它类似于Left Join,只是它给出了连接表的相反结果。它也被称为Right Outer Join。所以,Outer是可选的与Right Join一起使用的子句。
我们可以通过以下可视化表示来理解,其中Right Outer Join返回左侧表中的所有记录以及其他表中的匹配记录:
RIGHT JOIN 语法
下面是 Right Join 的语法,用于连接表 Table1 和 Table2 :
SELECT column_list
FROM Table1
RIGHT [OUTER] JOIN Table2
ON join_condition;
注意:在Right Join中,如果表中包含相同的列名,那么ON和USING子句将给出等效结果。
让我们看看Right Join如何工作。
此连接从右表开始选择列,并将该表的每个记录与左表进行匹配。如果两个记录都满足给定的连接条件,它将组合所有列成一个新的行集,并作为输出返回。如果右侧表的行在左侧表中找不到匹配的行,则它将使用空值组合右侧表中的这些行。这意味着Right Join返回右侧表中的所有数据,无论它是否与左侧表中的行匹配。
MySQL RIGHT JOIN示例
让我们通过一些示例来了解Right Join子句的工作原理:
用于连接两个表的RIGHT JOIN子句
在这里,我们将创建两个表“customers”和“orders”,这些表包含以下数据:
表: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;
执行上述查询成功后,将会给出相应的输出结果:
RIGHT JOIN与WHERE子句
MySQL 使用 WHERE子句 从表中提供过滤结果。下面的示例说明了使用RIGHT JOIN子句的情况:
SELECT * FROM customers
RIGHT JOIN orders USING(customer_id)
WHERE price>2500 AND price<5000;
这个声明会给出以下结果:
MySQL RIGHT JOIN多个表
我们已经创建了两个表,分别命名为 ” customers” 和 ” orders” 。让我们再创建一张表,命名为 ” contacts”,并包含以下数据:
执行以下语句来连接三个表格:customers,orders和contacts:
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;
上述语句返回以下输出: