在进行复杂的分析处理和数据发现时,一个表的数据通常不足以提供重要的见解,因此需要合并多个表。 SQL,作为与关系数据库通信的一种方法,允许您在表之间创建关系.
本文介绍如何使用 SQL 来连接表。
左连接、内连接、完全连接、自连接和交叉连接是其他五种主要连接类型。 为了与数据库连接,我们必须在语句中显式或隐式地提供连接类型。
这是通过使用诸如“LEFT JOIN”、“INNER JOIN”和“FULL OUTER JOIN”等术语来实现的。 每个类别都有自己的一组应用程序。 希望下面的比较表可以帮助您识别它们的小差异。
为了演示不同的连接,我们将使用下表作为示例。
右手边的表可能被认为是参考表或字典,我们从中扩展左手边表中的信息。 因此,左连接用于检索左表中的所有条目,同时引用右表中的值。
左连接还可以为我们提供更多关于为什么某些变量不匹配的信息。 例如。 是因为右表数据不完整,还是因为左表记录不准确或错别字?
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;
查询结果:
当我们想查看两个表的交集时,我们可以使用内连接。 内连接通常返回最少的行,因为它只显示两个表中都存在的记录。 所有空值都被过滤掉,如下面的结果所示。
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;
查询结果:
无论是否发现匹配,完全外连接都包含两个表中的每一行。 它用于全面了解两个表中的数据并发现任何差异。 因为在 Country Code 表中没有匹配 fips code = "AZ",所以在这种情况下,国家名称和 fips 代码的第一个条目为空。
另一方面,最后一行没有标准 ID 和国家/地区代码,因为 Google Ads GeoTargets 数据库没有国家/地区代码 =“ZA”的标准。
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;
查询结果:
右连接与左连接相同,除了 RIGHT JOIN 子句返回表中的所有行,而 FROM 子句只返回表中匹配的行。 因为 RIGHT JOIN 的结果可以通过在 LEFT JOIN 中交换两个连接的表名来实现,所以很少使用 RIGHT JOIN。
一个 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 查询看起来像这样:
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可以分解为三个步骤:
我希望通过阅读这篇文章,您将能够通过合并表来提高您的基本 SQL 能力并执行更复杂的分析。
SQL 连接是一个非常重要的主题,不仅对于您的日常工作,而且对于编程工作面试也是如此。 您还将在面试期间找到有关 SQL JOIN 概念的两个问题之一。
本文为从大数据到人工智能博主「xiaozhch5」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。