在 SQL 中连接表时正确使用键
Correct use of keys when joining tables in SQL
目前正在使用 SQLite 和 Pandas 学习数据科学。处理政治捐款数据集。我想知道加入两个 table 时下面代码中 WHERE contributors.candidate_id = candidates.id
的目的是什么。鉴于我的目标是提取特定候选人的贡献者并包括他们的名字来自另一个 table,如果没有这个条件,输出会不一样吗?
implicit_join_sel = """
SELECT
contributors.last_name, contributors.first_name, contributors.amount, candidates.last_name
FROM
contributors, candidates
WHERE
contributors.candidate_id = candidates.id
AND candidates.last_name = 'Obama';
"""
db.cursor().execute(implicit_join_sel)
输出:
contributors.last_name contributors.first_name contributors.amount candidates.last_name
0 Buckler Steve 50.0 Obama
1 Buckler Steve 25.0 Obama
2 Buckheit Bruce 100.0 Obama
3 Buckel Linda 2300.0 Obama
4 Buckel Linda -2300.0 Obama
tables 的 FYI 摘要:
--Candidates--
id first_name last_name middle_name party
0 33 Joseph Biden NaN D
1 36 Samuel Brownback NaN R
--Contributors--
last_name first_name middle_name street_1 street_2 city state zip amount date candidate_id
0 Agee Steven NaN 549 Laurel Branch Road NaN Floyd VA 24091 500.0 2007-06-30 16
4 Akin Charles NaN 10187 Sugar Creek Road NaN Bentonville AR 72712 100.0 2007-06-16 16
FROM
子句的语法单独会使 contributors
table 的每一行连接到 candidates
[=22] 的每一行=]. WHERE
子句将连接限制为仅具有相同候选 ID 的行对。
您的 FROM
和 WHERE
子句的形式不如更现代的 SQL 语法清晰,它将其表达为
FROM
contributors
inner join candidates on contributors.candidate_id = candidates.id
目前正在使用 SQLite 和 Pandas 学习数据科学。处理政治捐款数据集。我想知道加入两个 table 时下面代码中 WHERE contributors.candidate_id = candidates.id
的目的是什么。鉴于我的目标是提取特定候选人的贡献者并包括他们的名字来自另一个 table,如果没有这个条件,输出会不一样吗?
implicit_join_sel = """
SELECT
contributors.last_name, contributors.first_name, contributors.amount, candidates.last_name
FROM
contributors, candidates
WHERE
contributors.candidate_id = candidates.id
AND candidates.last_name = 'Obama';
"""
db.cursor().execute(implicit_join_sel)
输出:
contributors.last_name contributors.first_name contributors.amount candidates.last_name
0 Buckler Steve 50.0 Obama
1 Buckler Steve 25.0 Obama
2 Buckheit Bruce 100.0 Obama
3 Buckel Linda 2300.0 Obama
4 Buckel Linda -2300.0 Obama
tables 的 FYI 摘要:
--Candidates--
id first_name last_name middle_name party
0 33 Joseph Biden NaN D
1 36 Samuel Brownback NaN R
--Contributors--
last_name first_name middle_name street_1 street_2 city state zip amount date candidate_id
0 Agee Steven NaN 549 Laurel Branch Road NaN Floyd VA 24091 500.0 2007-06-30 16
4 Akin Charles NaN 10187 Sugar Creek Road NaN Bentonville AR 72712 100.0 2007-06-16 16
FROM
子句的语法单独会使 contributors
table 的每一行连接到 candidates
[=22] 的每一行=]. WHERE
子句将连接限制为仅具有相同候选 ID 的行对。
您的 FROM
和 WHERE
子句的形式不如更现代的 SQL 语法清晰,它将其表达为
FROM
contributors
inner join candidates on contributors.candidate_id = candidates.id