我有一个问题:哪个国家的人口比加拿大多而比波兰少?显示姓名和人口。
我写的查询很好:
SELECT name, population FROM world
WHERE population >
(SELECT population FROM world
WHERE name = 'Canada')
AND
population <
(SELECT population FROM world
WHERE name = 'Poland')
但是,答案键显示了更为优雅的东西:
SELECT name,population FROM world
WHERE population BETWEEN
(SELECT population+1 FROM world WHERE name='Canada')
AND
(SELECT population-1 FROM world WHERE name='Poland')
问:人口+1和人口-1实际上是做什么的?我检索了population、population+1和population-1,它们所做的只是从得到的列值中加一减一。为什么这是我要解决的问题的必要条件?为什么我不能我只是做:
SELECT name,population FROM world
WHERE population BETWEEN
(SELECT population FROM world WHERE name='Canada')
AND
(SELECT population FROM world WHERE name='Poland')
运行上面的查询返回一个不正确的结果,尽管它(在我看来)相当于我原来的查询,它返回了正确的结果!
任何帮助我的头围绕这是非常感谢!
注意:使用sqlzoo.net平台运行我的查询。
1条答案
按热度按时间cedebl8k1#
你的版本更好。另一种方法是在总体上加1或减1。为什么?因为
between
包括结束点和问题显然不想结束点。因此,
>
以及<
是个比哄骗好得多的选择between
做不该做的事。