在SQL中连接表时正确使用键

时间:2017-07-09 16:15:38

标签: python sql sqlite python-db-api

目前正在使用SQLite和Pandas学习数据科学。致力于政治捐款数据集。在加入两个表时,我想知道下面代码中WHERE contributors.candidate_id = candidates.id的目的是什么。鉴于我的目标是为特定候选人提取贡献者并在另一个表中包含他们的名字,如果没有这个条件,输出会不一样吗?

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

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

1 个答案:

答案 0 :(得分:1)

单独FROM子句的sytax会导致contributors表的每一行都连接到candidates表的每一行。 WHERE子句将连接限制为仅具有相同候选ID的那些行对。

您的FROMWHERE子句的形式并不像更现代的SQL语法那样清晰,后者会将其表达为

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