SQL子查询 - 您执行SELECT语句的顺序是什么?

时间:2011-06-19 23:47:40

标签: sql database

我刚刚开始学习SQL几天前,我正在尝试理解在构建子查询时应该使用SELECT语句的顺序。这是我想要完成的一个简单示例。

我有两个表 - 一个用于指定客户列表的人口统计信息,另一个用于详细说明他们对我们公司的了解。

在第一个表格中,我的客户在“性别”列中被列为“男性”或“女性”,然后在下一列中指定了他们的种族(高加索人,非裔美国人,西班牙裔等)。

在第二个表格中,有一个推荐栏,指明他们对我们公司(电视,广播,网站等)的了解。

我想先按性别过滤客户(我只想显示女性数据),然后我想计算一下我们的客户通过我们的网站为表格中列出的每个种族找到我们的次数。

SELECT Ethnicity, COUNT(Referral)
FROM Demographics, Marketing
WHERE Demographics.id = Marketing.source_id
AND Referral = 'website'
/* confused about how to put subquery here saying Gender = 'Female' */
ORDER BY Ethnicity

基本上,我对如何正确包含子查询以及我是否按正确顺序进行过滤感到困惑。

但这就是我希望我的桌子看起来像:

/*Data is shown for ONLY Females */

Referral        Caucasian     African American       Hispanic      Asian

website          7             19                     14            22

对不起,这段代码可能真的搞砸了。如果可以,请帮忙。

2 个答案:

答案 0 :(得分:2)

根据您的描述,您不需要子查询:

SELECT Ethnicity, COUNT(Referral)
FROM Demographics, Marketing
WHERE Demographics.id = Marketing.source_id
AND Referral = 'website'
AND Gender = 'Female'
ORDER BY Ethnicity

...请注意,这会为您提供与您所显示的结果集不同的结果集,但是,按种族划分,每行都会计算。

答案 1 :(得分:2)

当您使用两个表时,您必须使用INNER JOIN语法:  http://w3schools.com/sql/sql_join_inner.asp

    SELECT Ethnicity, COUNT(Referral)
    FROM Demographics INNER JOIN Marketing
    ...
    AND Referral = 'website'
    AND Gender = 'Female'
    ...