表:
cia ( name , region , area , population , gdp )
我自学SQL并且遇到了一些我无法弄清楚的东西。我试图从数据库中提取的数据是比利时,荷兰和卢森堡的人口总数。我尝试过以下方法:
SELECT SUM(population) FROM cia WHERE name = 'Belgium' AND 'Netherlands' AND 'Luxembourg';
返回的值似乎不正确。我错过了什么?
答案 0 :(得分:5)
使用or
代替and
,因为单行不可以同时拥有这3个设置。您的name
单元格只能是或。
对于值列表,您还可以使用IN()
SELECT SUM(population)
FROM cia
WHERE name IN('Belgium', 'Netherlands', 'Luxembourg')
答案 1 :(得分:0)
Uriils的答案是最好的/最一致的最佳选择;但是,根据您的SQL版本和数据集的大小,您可能需要考虑使用UNION来加速操作(通常只是Oracle的一个问题)。因此,如果您已经/将在Oracle中,以下可能会运行得更快,具体取决于您的设置。
SELECT SUM(result_sum) FROM
(
SELECT SUM(population) AS result_sum
FROM cia
WHERE name = 'Belgium'
UNION
SELECT SUM(population) AS result_sum
FROM cia
WHERE name = 'Netherlands'
UNION
SELECT SUM(population) AS result_sum
FROM cia
WHERE name = 'Luxembourg'
)
;
在任何一种情况下,我都建议使用LOWER()并将搜索条件与所有小写答案放在一起,以防止由于大小写不一致而导致结果丢失。
SELECT SUM(result_sum) FROM
(
SELECT SUM(population) AS result_sum
FROM cia
WHERE LOWER(name) = 'belgium'
UNION
SELECT SUM(population) AS result_sum
FROM cia
WHERE LOWER(name) = 'netherlands'
UNION
SELECT SUM(population) AS result_sum
FROM cia
WHERE LOWER(name) = 'luxembourg'
)