SQL Join介绍
数据分析任务所需的数据通常来自多个来源。SQL JOIN 是将这些数据组合在一起的工具。
SQL JOIN 是组合来自多个资源的数据的最佳工具!
在本文中,我将分享有关 SQL JOIN 的最常见面试题。我还分享了一些例子来演示这些概念。
从最基本和最容易回答的问题开始。
什么是 SQL JOIN,什么是不同的 SQL JOIN?
在 SQL 中,JOIN子句用于根据它们之间的相关列组合来自两个或多个表的行。
JOIN 在不同的表之间创建逻辑绑定,并有效地从这些表中获取所需的数据。
根据多个表之间需要什么样的逻辑绑定,有四种基本类型的 SQL 连接:
- 内部联接
- 左外连接
- 右外连接
- 全外连接
这个问题有助于面试官了解候选人是否对 JOIN 有基本的了解。
好吧,这个问题通常有以下一个或多个作为后续问题。
INNER JOIN 和 OUTER JOIN 有什么区别?
两者之间的主要区别在于,在连接 2 个表时,INNER JOIN仅提取两个表OUTER JOIN中共有的行,并且除了两者之间的公共行之外,还提取两个表中不常见的行。
现在,让我们看看这些 JOIN 如何使用下面的示例处理数据,
内部联接
从逻辑上讲,这会返回两个数据集的交集,即仅返回属于两个表的行或记录。
例如,我有关于学生的虚拟数据。

以及有关订单的虚拟数据。

内连接可以如下使用,
SELECT student.Student_id, orders.order_id, orders.order_date FROM student INNER JOIN orders ON student.Student_id = orders.Student_id ORDER BY student.Student_id;

正如您在上面看到的,该查询返回了两个表中在和表Student_id中都有匹配值的所有行。studentorders
表中Student_id等于 8000 和 9000 的student行将被省略,因为它们在两个表中都不存在。表中order_id为 5 的orders行将被省略,因为表Student_id中不存在 NULL student。
使用维恩图可以将其视为-

外连接
OUTER JOIN 通过组合 LEFT JOIN 和 RIGHT JOIN 的结果来创建结果集。结果集将包含两个表中的所有行。对于没有匹配的行,结果集将包含NULL值。
例如,使用与上一个示例相同的学生表:

以及带有以下数据的订单表:

外连接可以如下使用,
SELECT Student.Student_id, orders.order_id, orders.order_date FROM Student OUTER JOIN orders ON Student.Student_id = orders.Student_id ORDER BY Student.Student_id;
将选择 7 条记录。这些是您应该看到的结果:

这个 OUTER JOIN 示例将返回表中的orders 所有行和表中的所有行student。
只要不满足连接条件,就会将 NULL 值扩展到结果集中的那些字段。这意味着如果表中的某个Student_id 值在student表中不存在,则orders表中的所有字段在orders结果集中都将显示为 NULL。此外,如果表中的某个Student_id值orders不存在于student表中,则表中的所有字段在student结果集中都将显示为 NULL。
如您所见,Student_id将包括 8000 和 9000 的行,但这些记录的order_idandorder_date字段包含 NULL 值。order_id也将包括 5的行,但该Student_id记录的字段具有 NULL 值。
使用维恩图可以将其视为-

左连接和右连接有什么区别?
两者之间的主要区别在于连接 2 个表时,LEFT JOIN 此连接返回左表中的所有行以及右表中的匹配行。和
RIGHT JOIN 此联接返回右表中的所有行以及左表中的匹配行。
现在,让我们看看这些 JOIN 如何使用下面的示例处理数据,
左连接
此连接返回连接左侧表的所有行,并匹配连接右侧表的行。对于右侧没有匹配行的行,结果集将包含null。
例如,使用与上一个示例相同的学生表:

以及带有以下数据的订单表:

左连接可以如下使用:
SELECT Student.Student_id, orders.order_id, orders.order_date FROM Student LEFT JOIN orders ON Student.Student_id = orders.Student_id ORDER BY Student.Student_id;
将选择 6 条记录。这些是您应该看到的结果:

此 LEFT JOIN 示例将返回表中的所有行,并且仅返回表中连接字段相等的student那些行。orders
如果表中的某个Student_id值在student表中不存在,则orders表中的所有字段在orders 结果集中都将显示为 NULL。如您所见,Student_id8000 和 9000 的行将包含在 LEFT JOIN 中,但order_id andorder_date字段显示为 NULL。
使用维恩图可以将其视为-

正确加入
RIGHT JOIN 类似于 LEFT JOIN。此连接返回连接右侧表的所有行以及连接左侧表的匹配行。对于左侧没有匹配行的行,结果集将包含null
例如,使用与上一个示例相同的学生表:

以及带有以下数据的订单表:

Right Join 可以如下使用,
SELECT Student.Student_id, orders.order_id, orders.order_date FROM Student RIGHT JOIN orders ON Student.Student_id = orders.Student_id ORDER BY Student.Student_id;
将选择 5 条记录。这些是您应该看到的结果:

此 RIGHT JOIN 示例将返回表中的所有行,并且仅返回表中连接字段相等的orders那些行。student
如果表中的某个Student_id 值在orders表中不存在,则student表中的所有字段在student结果集中都将显示为 NULL。如您所见,order_id 5 所在的行将包含在 RIGHT JOIN 中,但该Student_id字段显示为 NULL。
使用维恩图可以将其视为-

关于 SQL Join 的结论
我希望你觉得这篇文章有趣且有用。了解不同类型的 SQL JOIN 总是好的,尽管大多数时候你真的只使用INNER JOIN和LEFT JOIN。
让我们快速回顾一下我们讨论过的连接类型。
INNER JOIN:只要满足连接条件,就合并两个表中的行。
LEFT JOIN:与内连接相同,除了将第一个表中的行添加到连接表中,而不管连接条件的评估。
RIGHT JOIN:与内连接相同,除了将第二个表中的行添加到连接表中,而不管连接条件的评估。
FULL OUTER JOIN:左连接和右连接的组合。
原文标题:3 Most Frequently Asked SQL Join Interview Questions
原文作者:Aparna Gurav
原文链接:https://www.analyticsvidhya.com/blog/2022/05/3-most-frequently-asked-sql-join-interview-questions/




