Вы можете думать о коррелированном подзапросе как о циклическом механизме.Это не обязательно то, как это реализовано, но оно описывает, что оно делает.
Рассмотрим такие данные, как:
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, поэтому это условие ложно.
Затем процесс повторяется для каждой строки.Для континента «а» единственной строкой, которая удовлетворяет условию, является третий - тот, который имеет наибольшую площадь.