返回

LeetCode-SQL每日一练——1.组合两个表:轻松掌握左外连接

后端

LeetCode-SQL每日一练——1.组合两个表:轻松掌握左外连接

题目概述

题目

表1: Person

id name age
1 John Doe 30
2 Jane Smith 25
3 Michael Jones 35

表2: Address

id address
1 123 Main Street
2 456 Elm Street
3 789 Oak Street

目标

组合这两个表,以便为每个Person获取对应的地址信息。

解题思路

我们可以使用左外连接来组合这两个表。左外连接是一种连接操作,它允许我们从左表中获取所有行,并从右表中获取与左表匹配的行。如果右表中没有与左表某行匹配的行,则该行将在结果集中显示为NULL。

在我们的例子中,我们可以使用以下SQL语句来组合这两个表:

SELECT *
FROM Person
LEFT JOIN Address
ON Person.id = Address.id;

这个查询将返回以下结果集:

id name age address
1 John Doe 30 123 Main Street
2 Jane Smith 25 456 Elm Street
3 Michael Jones 35 789 Oak Street

如您所见,结果集中包含了两个表的所有行。对于那些在Address表中没有匹配行的Person行,address列显示为NULL。

代码实现

python
import pandas as pd

# 读取数据
person = pd.read_csv('person.csv')
address = pd.read_csv('address.csv')

# 左外连接
result = pd.merge(person, address, on='id', how='left')

# 打印结果
print(result)

运行以上代码,将在终端输出以下结果:

   id   name  age address
0   1  John Doe   30  123 Main Street
1   2  Jane Smith  25  456 Elm Street
2   3  Michael Jones  35  789 Oak Street

总结

左外连接是一种非常有用的连接操作,它允许我们从两个表中获取数据并将其组合在一起。在我们的例子中,我们使用了左外连接来组合Person表和Address表,以便为每个Person获取对应的地址信息。

左外连接的优点在于,它允许我们从左表中获取所有行,即使在右表中没有匹配的行。这使得左外连接非常适合用于组合具有不同数量行的数据集。

左外连接的局限性在于,它可能会导致结果集中出现重复行。这是因为,如果一个Person有多个地址,则每个地址都会在结果集中显示为单独一行。为了避免这种情况,我们可以使用DISTINCT来确保结果集中只包含唯一行。