如何在 SQL 中使用 LEFT、RIGHT、INNER、OUTER、FULL 和 SELF JOIN?

什么是JOIN,为什么需要它们?

在进行复杂的分析处理和数据发现时,一个表的数据通常不足以提供重要的见解,因此需要合并多个表。 SQL,作为与关系数据库通信的一种方法,允许您在表之间创建关系.

本文介绍如何使用 SQL 来连接表。

SQL JOIN 的类型

左连接、内连接、完全连接、自连接和交叉连接是其他五种主要连接类型。 为了与数据库连接,我们必须在语句中显式或隐式地提供连接类型。

这是通过使用诸如“LEFT JOIN”、“INNER JOIN”和“FULL OUTER JOIN”等术语来实现的。 每个类别都有自己的一组应用程序。 希望下面的比较表可以帮助您识别它们的小差异。

为了演示不同的连接,我们将使用下表作为示例。

image767498126ce79162.png

LEFT JOIN

右手边的表可能被认为是参考表或字典,我们从中扩展左手边表中的信息。 因此,左连接用于检索左表中的所有条目,同时引用右表中的值。

左连接还可以为我们提供更多关于为什么某些变量不匹配的信息。 例如。 是因为右表数据不完整,还是因为左表记录不准确或错别字?

image.png

LEFT JOIN 查询看起来像这样:

SELECT criteria_id, country_code, country_name, fips_code
FROM Google_Ads_GeoTargets gt
LEFT JOIN Country_Code cc
ON gt.country_code = cc.fips_code;

查询结果:

imagece2e0f9799d4e483.png

INNER JOIN

当我们想查看两个表的交集时,我们可以使用内连接。 内连接通常返回最少的行,因为它只显示两个表中都存在的记录。 所有空值都被过滤掉,如下面的结果所示。

imagea1a109adb19a99e3.png

INNER JOIN 关键字用于标识这种连接:

SELECT criteria_id, country_code, country_name, fips_code
FROM Google_Ads_GeoTargets gt
INNER JOIN Country_Code cc
ON gt.country_code = cc.fips_code;

查询结果:
image5d03185478fcb02c.png

FULL JOIN

无论是否发现匹配,完全外连接都包含两个表中的每一行。 它用于全面了解两个表中的数据并发现任何差异。 因为在 Country Code 表中没有匹配 fips code = "AZ",所以在这种情况下,国家名称和 fips 代码的第一个条目为空。

另一方面,最后一行没有标准 ID 和国家/地区代码,因为 Google Ads GeoTargets 数据库没有国家/地区代码 =“ZA”的标准。

imagecba16e9fbc7500fd.png

FULL JOIN 查询看起来像这样:

SELECT criteria_id, country_code, country_name, fips_code
FROM Google_Ads_GeoTargets gt
FULL OUTER JOIN Country_Code cc
ON gt.country_code = cc.fips_code;

查询结果:
image3e72cbbc15e26453.png

RIGHT JOIN

右连接与左连接相同,除了 RIGHT JOIN 子句返回表中的所有行,而 FROM 子句只返回表中匹配的行。 因为 RIGHT JOIN 的结果可以通过在 LEFT JOIN 中交换两个连接的表名来实现,所以很少使用 RIGHT JOIN。

image3649fc977d049ccc.png

一个 RIGHT JOIN 查询看起来像这样:

SELECT criteria_id, country_code, country_name, fips_code
FROM Google_Ads_GeoTargets gt
RIGHT JOIN Country_Code cc
ON gt.country_code = cc.fips_code

SELF JOIN

我们使用自连接来处理一元关系,因为它将表链接到自身。 建立分层连接的能力,例如员工和经理之间、类别和子类别之间,等等,是非常有用的。 最后,仍然可以将其视为连接两个表的一种方式。

imagedf6e2ff3c640eae1.png

SELF JOIN 查询看起来像这样:

SELECT e.employeeID AS employeeID, e.name AS name, m.name as manager
FROM Employee e
LEFT JOIN Employee m
ON e.managerID = m.employeeID

考虑下表来解释 SELF JOIN。 考虑如下的员工表:

image3e09d2745949704a.png

现在,上面解释的查询将产生如下结果:

image79736a90e37bf98e.png

结论

这篇文章最重要的收获是 SQL JOIN可以分解为三个步骤:

  1. 选择您要使用的表和特征。
  2. 判断join的状态
  3. 从左连接、内连接、自连接和完全连接中选择合适的连接类型。

我希望通过阅读这篇文章,您将能够通过合并表来提高您的基本 SQL 能力并执行更复杂的分析。

SQL 连接是一个非常重要的主题,不仅对于您的日常工作,而且对于编程工作面试也是如此。 您还将在面试期间找到有关 SQL JOIN 概念的两个问题之一。

0 0 投票数
文章评分

本文为从大数据到人工智能博主「xiaozhch5」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://lrting.top/backend/4100/

(0)
上一篇 2022-03-13 23:17
下一篇 2022-03-14 17:22

相关推荐

订阅评论
提醒
guest

0 评论
内联反馈
查看所有评论
0
希望看到您的想法,请您发表评论x