写点什么

SQL FULL OUTER JOIN 关键字:左右表中所有记录的全连接解析

作者:小万哥
  • 2023-11-27
    广东
  • 本文字数:1359 字

    阅读完需:约 4 分钟

SQL FULL OUTER JOIN 关键字:左右表中所有记录的全连接解析

SQL RIGHT JOIN 关键字

SQL RIGHT JOIN 关键字返回右表(table2)中的所有记录以及左表(table1)中的匹配记录。如果没有匹配,则左侧的结果为 0 条记录。

RIGHT JOIN 语法

SELECT column_name(s)FROM table1RIGHT JOIN table2ON table1.column_name = table2.column_name;
复制代码


注意:在某些数据库中,RIGHT JOIN 被称为 RIGHT OUTER JOIN。

SQL RIGHT JOIN

演示数据库

在本教程中,我们将使用著名的 Northwind 示例数据库。


以下是“Orders”表的部分选择:



以及“Employees”表的部分选择:


示例

假设我们想要检索所有订单以及与之关联的员工信息(如果有的话)。我们可以使用 RIGHT JOIN 将两个表连接在一起,以便即使某些订单没有关联的员工信息,它们仍然会在结果中显示。


SELECT Orders.OrderID, Orders.OrderDate, Employees.EmployeeID, Employees.FirstName, Employees.LastNameFROM OrdersRIGHT JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID;
复制代码


在这个例子中,RIGHT JOIN 确保了所有的员工信息都会出现在结果中,而与之关联的订单信息(如果存在的话)也会被检索出来。如果某个员工没有订单,相应的 OrderID 和 OrderDate 列将显示为 NULL。

SQL FULL OUTER JOIN 关键字

SQL FULL OUTER JOIN 关键字在左表(table1)或右表(table2)记录中有匹配时返回所有记录。

FULL OUTER JOIN 语法

SELECT column_name(s)FROM table1FULL OUTER JOIN table2ON table1.column_name = table2.column_nameWHERE condition;
复制代码


注意:FULL OUTER JOIN 和 FULL JOIN 是相同的。FULL OUTER JOIN 可能返回非常大的结果集!

SQL FULL OUTER JOIN

演示数据库

在本教程中,我们将使用著名的 Northwind 示例数据库。


以下是“Customers”表的部分选择:



以及“Orders”表的部分选择:


SQL FULL OUTER JOIN 示例

以下 SQL 语句选择所有客户和所有订单:


SELECT Customers.CustomerName, Orders.OrderIDFROM CustomersFULL OUTER JOIN Orders ON Customers.CustomerID=Orders.CustomerIDORDER BY Customers.CustomerName;
复制代码


结果集的一部分可能如下所示:



注意:FULL OUTER JOIN 关键字返回两个表中所有匹配的记录,无论另一表是否匹配。因此,如果“Customers”中有没有在“Orders”中有匹配的行,或者如果“Orders”中有没有在“Customers”中有匹配的行,这些行也会被列出。

SQL Self Join

SQL 自连接是一个普通的连接,但是表与自身连接。

自连接语法

SELECT column_name(s)FROM table1 T1, table1 T2WHERE condition;
复制代码


T1 和 T2 是同一表的不同表别名。

演示数据库

在本教程中,我们将使用著名的 Northwind 示例数据库。


以下是“Customers”表的部分选择:


SQL Self Join 示例

以下 SQL 语句选择两个不同客户之间的订单:


SELECT DISTINCT A.CustomerName AS Customer1, B.CustomerName AS Customer2, A.OrderIDFROM Orders A, Orders BWHERE A.CustomerID < B.CustomerID AND A.OrderID = B.OrderIDORDER BY A.OrderID;
复制代码


在这个例子中,我们使用了两个别名,A 和 B,来表示同一张“Orders”表的不同实例。通过比较 CustomerID 和 OrderID,我们选择了两个不同客户之间的订单,并使用 DISTINCT 确保结果中没有重复的行。

最后

为了方便其他设备和平台的小伙伴观看往期文章:公众号搜索Let us Coding,或者扫描下方二维码,关注公众号,即可获取最新文章。


看完如果觉得有帮助,欢迎点赞、收藏关注



发布于: 刚刚阅读数: 4
用户头像

小万哥

关注

代码如人生 2023-02-09 加入

编程爱好者

评论

发布
暂无评论
SQL FULL OUTER JOIN 关键字:左右表中所有记录的全连接解析_MySQL_小万哥_InfoQ写作社区