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

举报
从大数据到人工智能 发表于 2022/03/28 00:35:40 2022/03/28
【摘要】 什么是JOIN,为什么需要它们?在进行复杂的分析处理和数据发现时,一个表的数据通常不足以提供重要的见解,因此需要合并多个表。 SQL,作为与关系数据库通信的一种方法,允许您在表之间创建关系.本文介绍如何使用 SQL 来连接表。 SQL 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 概念的两个问题之一。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200