我在sqlzoo的本教程上陷入了q.8,这是对q.7的后续的。
问题#7
有两种大型方法:一个国家的面积超过300万平方公里,或者人口超过2.5亿。
显示这些国家/地区划分的国家或人口大。显示名称,人口和地区。
问题#8
美国和中国的人口很大,划分大。排除这些国家。
显示大小的国家/地区或 Big by Movation,但并非同时。显示名称,人口和地区。
我取得了成功的代码是:
SELECT name, population, area
FROM world
WHERE area > 3000000
OR population > 250000000
AND NOT EXISTS (
SELECT name, population, area
FROM world
WHERE name='USA'
OR 'China'
)
但是,"中国"one_answers"美国"仍然出现在我的结果中!有人可以告诉我如何编写一个从句删除它们吗?
(请注意,这是OP的问题8-问题7仅是OR
)
需要条件A或条件B的逻辑操作,但并非同时进行独家或,并且被缩写为 XOR
这是由ANSI SQL支持的,因此可以通过在比较标准中使用XOR
获得答案,例如:
SELECT name, population, area
FROM world
WHERE (population > 250000000) XOR (area > 3000000);
re:更直观的替代
您可以将XOR
扩展到:
WHERE ((population > 250000000) OR (area > 3000000))
AND NOT ((population > 250000000) AND (area > 3000000))
但从一般意义上讲,与其重复逻辑确定一个国家是big
(按地区或人口),使用派生的表可能更容易理解派生的列可以在外部查询中的过滤器逻辑中重复使用:
SELECT name, population, area
FROM
(SELECT
name, population, area,
CASE WHEN population > 250000000 THEN 1 ELSE 0 END AS IsBigPop,
CASE WHEN area > 3000000 THEN 1 ELSE 0 END AS IsBigArea
FROM world
) DerivedWorld
WHERE (IsBigPop = 1 OR IsBigArea = 1) AND NOT (IsBigPop = 1 AND IsBigArea = 1);
(当然,您也可以将WHERE
子句缩写为XOR
)
可以使用
select name, population, area
from world
where ( area>3000000 or population>250000000 )
and name not in ( 'USA', 'China' )
;
SELECT name, population, area FROM world WHERE (area>3000000 OR population>250000000) AND name NOT IN('USA','China')
完整的答案实际上已经在问题中了,您只需要将其翻译成布尔术语,查询引擎可以理解。
您的查询启动了我们的正确,您只是缺少最后一位,即一个或另一个应该应用,但不适用。
SELECT name, population, area
FROM world
WHERE
-- The first clause select all that match either or both criteria
(
area > 3000000
OR population > 250000000
)
-- The second clause filters those that match both criteria
AND NOT (
area > 3000000
AND population > 250000000
)
我正在执行相同的教程,并且我遇到了同样的问题。他们没有正确地表达这个问题,并且缺少一些标准。这是我的答案:
select name, population, area
from world
where ( area>3000000 or population>250000000 )
and name not in ( 'United States', 'China', 'India')
;
考虑以下参数 -
(面积> 3000000和人口< 250000000):只有区域大的国家
(区域< 3000000和人口< 250000000):只有人口大的国家
因此,最终代码将就像 -
select name, population, area from world
where (area > 3000000 and population < 250000000) OR
(area < 3000000 and population > 250000000);
尝试以下:
select name, population, area
from world where ( area>3000000 or population>250000000 ) and name not in ( 'USA', 'China' );
SELECT name, population, area
FROM world
WHERE (area > 3000000 OR population > 250000000)
AND name NOT IN ('United states', 'China')
AND NOT (area > 3000000 AND population > 250000000)
SELECT name, population, area
FROM world
WHERE population > 250000000 XOR area > 3000000
尝试一下:
选择世界的名称,人口,世界
其中(区域> 3000000或人口> 250000000)
而不是(区域> 3000000和人口> 250000000)
我只是做了同一教程。这是我要工作的答案。请注意"名称,人口,区域"的顺序。它不会以不同的顺序注册为正确的登记。
选择名称,人口,区域来自世界其中(面积> 3000000或人口> 250000000)而不是(区域> 3000000和人口> 250000000)
问题7
SELECT name, population, area
FROM world
WHERE area > 3000000 OR population > 250000000;
问题8
下面写的代码大约是您可以得到的简明语法。如WHERE name NOT IN ('United States', 'China')
所述,可以针对提到的特定国家/地区,但数据随时间变化。
SELECT name, population, area
FROM world
WHERE (population > 250000000 OR area > 3000000)
AND NOT (population > 250000000 AND area > 3000000);
一个国家的人口增加了250,000,000的道路。例如,您引用的网站现在包括印度与美国和中国。
以下图表:
select name, population, area
from world
where (population >250000000 or area>3000000)
and name not in ('united states','china','india')
SELECT name, population, area
FROM world
WHERE (area > 3000000 XOR population > 250000000)
AND (name NOT IN ('India', 'United States', 'China'))
我得到了正确的,并满足了它要求的所有要求。
select name ,population, area
from world
where (area > 3000000 or population > 250000000)
and name not in (select name from world where area > 3000000 and population > 250000000)
SELECT
name,
population,
area
FROM
world
WHERE
name NOT IN ('United States', 'India', 'China')
AND
population > 250000000
OR
area > 3000000
AND NOT
(
(population > 250000000)
AND
(area > 3000000)
)
这是我为排除特定国家/地区限制人口或地区的标准
尝试以下:
SELECT name, population, area
FROM world
WHERE (area > 3000000
OR population > 250000000)
AND name not in ('united States','INDIA','China')
select
name,
population,
area
from
world
where
(population >250000000 or area >3000000)
AND NOT (
area > 3000000
AND population > 250000000)
此答案有效
select name, population, area
from world
where ( area > 3000000 or population > 250000000 )
and name not in ('USA');
使用以下代码,
select name,population,area
from world
where area> 3000000 OR population > 250000000;
尝试以下:
SELECT name, population, area
FROM world
WHERE ((population > 250000000) AND NOT(area > 3000000))
OR((area > 3000000) AND NOT(population > 250000000))
i在查询下检查,这效果很好:
SELECT name, population, area
FROM world
WHERE (population > 250000000) OR (area > 3000000);
SELECT name , population, area
FROM world
WHERE (area > 3000000 or population > 250000000)
except
SELECT name , population, area
FROM world
WHERE (area > 3000000 and population > 250000000)
select name, population, area
from world
where ( area>3000000 or population>250000000 )
and name not in ( 'United States', 'China', 'India')
有人可能已经从Sqlzoo带走了印度。我不是管理员,但我将其编辑回问题。否则,这些帖子中的大多数都是正确的。
SELECT name, population , area FROM world WHERE ((area > 3000000 && population < 250000000) OR ( area < 3000000 && population > 250000000)) AND (name NOT IN ('USA' , 'India' , 'China'))
问题#7的正确答案是
select name,population,area
from world
where (area>3000000 AND population<25000000) OR
(area<3000000 AND population>25000000) OR
(area>3000000 AND population>25000000)