暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL面试题 - 3道最常见的 SQL Join 面试题 

原创 小小亮 2022-08-26
2357

SQL Join介绍

数据分析任务所需的数据通常来自多个来源。SQL JOIN 是将这些数据组合在一起的工具。

SQL JOIN 是组合来自多个资源的数据的最佳工具!

在本文中,我将分享有关 SQL JOIN 的最常见面试题我还分享了一些例子来演示这些概念。

从最基本和最容易回答的问题开始。

什么是 SQL JOIN,什么是不同的 SQL JOIN?

在 SQL 中,JOIN子句用于根据它们之间的相关列组合来自两个或多个表的行。


JOIN 在不同的表之间创建逻辑绑定,并有效地从这些表中获取所需的数据。

根据多个表之间需要什么样的逻辑绑定,有四种基本类型的 SQL 连接:

  1. 内部联接
  2. 左外连接
  3. 右外连接
  4. 全外连接

这个问题有助于面试官了解候选人是否对 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;
内部 JOIN 的输出
Inner JOIN 的输出 | 作者图片

正如您在上面看到的,该查询返回了两个表中在和表Student_id中都有匹配值的所有行studentorders

表中Student_id等于 8000 和 9000 的student行将被省略,因为它们在两个表中都不存在。表中order_id为 5 的orders行将被省略,因为表Student_id中不存在 NULL student

使用维恩图可以将其视为- 

维恩图
作者图片

外连接

OUTER JOIN 通过组合 LEFT JOIN 和 RIGHT JOIN 的结果来创建结果集。结果集将包含两个表中的所有行。对于没有匹配的行,结果集将包含NULL值。

例如,使用与上一个示例相同的学生表:

外连接

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

外连接图 2

外连接可以如下使用,

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 条记录。这些是您应该看到的结果:

7 条记录

这个 OUTER JOIN 示例将返回表中的orders 所有行和表中的所有行student

只要不满足连接条件,就会将 NULL 值扩展到结果集中的那些字段。这意味着如果表中的某个Student_id 值在student表中不存在,则orders表中的所有字段在orders结果集中都将显示为 NULL。此外,如果表中的某个Student_idorders不存在于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 条记录。这些是您应该看到的结果:

左连接图像 3

此 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

例如,使用与上一个示例相同的学生表:

正确加入

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

右连接图 2

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 条记录。这些是您应该看到的结果:

右连接图 3

此 RIGHT JOIN 示例将返回表中的所有行,并且仅返回表中连接字段相等的orders那些行。student

如果表中的某个Student_id 值在orders表中不存在,则student表中的所有字段在student结果集中都将显示为 NULL。如您所见,order_id 5 所在的行将包含在 RIGHT JOIN 中,但该Student_id字段显示为 NULL。

使用维恩图可以将其视为-

 

维恩图|  图 3
图片作者

 

关于 SQL Join 的结论

我希望你觉得这篇文章有趣且有用。了解不同类型的 SQL JOIN 总是好的,尽管大多数时候你真的只使用INNER JOINLEFT 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/

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论