Как я могу понять коррелированные запросы? - PullRequest
0 голосов
/ 14 февраля 2019

Я только что начал учебник в стиле SQL, НО я до сих пор не понял концепцию коррелированных запросов.имя, область и континент - это поля таблицы.

Запрос состоит в том, чтобы найти самую большую страну (по области) на каждом континенте, показать континент, название и область.

черновик работы на данный момент:

SELECT continent, name, population FROM world x
WHERE area >= ALL
(SELECT area FROM world y
WHERE y.continent=x.continent
AND population>0)

Пробовал читать об этом в нескольких других блогахнеобходимо понимать логику коррелированных запросов.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Вы можете думать о коррелированном подзапросе как о циклическом механизме.Это не обязательно то, как это реализовано, но оно описывает, что оно делает.

Рассмотрим такие данные, как:

row    continent    area     population
  1        a        100          19
  2        a        200          10
  3        a        300          20
  4        b         15        2000

Внешний запрос проходит по каждой строке.Затем он смотрит на все совпадающие строки.Итак, для этого требуется запись 1:

row    continent    area     population
  1        a        100          19

Затем выполняется подзапрос:

(SELECT w2.area
 FROM world w2
 WHERE w2.continent = w.continent AND
       w2.population > 0
)

И подставляется значение из внешней таблицы:

(SELECT w2.area
 FROM world w2
 WHERE w2.continent = 'a' AND
       w2.population > 0
)

Это возвращает набор (100, 200, 300).

Затем применяется условие:

where w1.area >= all (100, 200, 300)

(Это не совсем допустимый SQL, но он передает идею.)

Итак, мы знаем, что w1.area = 100, поэтому это условие ложно.

Затем процесс повторяется для каждой строки.Для континента «а» единственной строкой, которая удовлетворяет условию, является третий - тот, который имеет наибольшую площадь.

0 голосов
/ 14 февраля 2019

Я предполагаю, что вы разместили запрос.Вам просто нужно уточнить, что он делает.

SELECT continent, name, population 
FROM world x
WHERE area >= ALL (
    SELECT area FROM world y
    WHERE y.continent=x.continent
    AND population>0
)

Запрос переводится как "Get the continent, name, and population of a country where area is bigger than or equal to all other countries in the same continent".Предложение WHERE во внутреннем запросе должно связать 2 запроса (в данном случае страны на одном континенте).Без WHERE он получит страну с самыми большими в мире.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...