返回
LeetCode-SQL每日一练——1.组合两个表:轻松掌握左外连接
后端
2023-11-04 12:40:28
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来确保结果集中只包含唯一行。