Вопрос о № 1 и № 2 (ВСЕ) во вложенном тесте SELECT от sqlzoo.net - PullRequest
0 голосов
/ 25 декабря 2018

Меня немного смущает использование ALL. В тесте Nested SELECT из sqlzoo (ссылка здесь :)

Q1: выберите код, отображающий имя, региони население самой маленькой страны в каждом регионе

SELECT region, name, population FROM bbc x WHERE population <= ALL (SELECT 
population FROM bbc y WHERE y.region=x.region AND population>0)

Я подумал, что это имеет смысл для меня, потому что мы пытаемся получить население, которое меньше, чем самая маленькая страна в каждом регионе (опрошено с внутреннейсначала подзапрос).

Но затем приходит Q2: выберите код, который показывает страны, относящиеся к регионам со всем населением более 50000

, а затем код для этого:

SELECT name,region,population FROM bbc x WHERE 50000 < ALL (SELECT population 
FROM bbc y WHERE x.region=y.region AND y.population>0)

Если мы пытаемся получить страны с населением> 50000, почему знак не>, а <вместо?</p>

Мне кажется, что где-то не хватает базового понимания, но я даже не уверен, где.

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

Было бы более читабельно и легче понять, если бы это можно было написать так:

WHERE ALL (SELECT population....) > 50000

, но это синтаксически неправильно .От https://oracle -base.com / article / misc / all-any-some-some-some-some-some-Some-Some-сравнение-условий-в-sql

Условие сравнения ALL используется для сравнениязначение для списка или подзапроса. Ему должно предшествовать : =,! =,>, <, <=,> =, А затем список или подзапрос.

Также из https://docs.microsoft.com/en-us/sql/t-sql/language-elements/all-transact-sql?view=sql-server-2017
синтаксис должен быть:

scalar_expression {= |<> |! = |> |> = |!> |<|<= |! <} ALL (подзапрос) </p>

так что вы не можете избежать предложения ALL в правой части сравнения,но это все то же самое, поскольку 50000 должно быть меньше, чем каждый элемент в подзапросе.

0 голосов
/ 25 декабря 2018

Для первого вопроса population - первый, поэтому, когда вы запрашиваете «совокупность, которая <= (меньше или равна) всем совокупностям», это подразумевает, что она наименьшая. </p>

Во втором вопросе первое место в сравнении занимает 50000.

«Население свыше 50000» также подразумевает, что 50000 <эти совокупности, что в точности и говорит в запросе. </p>

...