在 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 的行对。

您的 FROMWHERE 子句的形式不如更现代的 SQL 语法清晰,它将其表达为

FROM
   contributors
   inner join candidates on contributors.candidate_id = candidates.id