前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在 SQL 中使用 LEFT、RIGHT、INNER、OUTER、FULL 和 SELF JOIN?

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

作者头像
从大数据到人工智能
发布2022-03-22 08:12:46
2K0
发布2022-03-22 08:12:46
举报
文章被收录于专栏:大数据-BigData

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

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

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

SQL JOIN 的类型

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

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

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

LEFT JOIN

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

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

LEFT JOIN 查询看起来像这样:

代码语言:javascript
复制
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;

查询结果:

INNER JOIN

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

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

代码语言:javascript
复制
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;

查询结果:

FULL JOIN

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

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

FULL JOIN 查询看起来像这样:

代码语言:javascript
复制
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;

查询结果:

RIGHT JOIN

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

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

代码语言:javascript
复制
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

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

SELF JOIN 查询看起来像这样:

代码语言:javascript
复制
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。 考虑如下的员工表:

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

结论

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

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

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

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

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

原文链接:https://cloud.tencent.com/developer/article/1960683

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是JOIN,为什么需要它们?
  • SQL JOIN 的类型
  • LEFT JOIN
  • INNER JOIN
  • FULL JOIN
  • RIGHT JOIN
  • SELF JOIN
  • 结论
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档