SQL подзапросы: коррелированные запросы

Коррелированные подзапросы в SELECT

Еще в SELECT подзапрос можно использовать в качестве коррелированного.

Коррелированный подзапрос - это подзапрос, который обращается к данным из внешнего запроса. Главное его отличие от обычного подзапроса в том, что он выполняется для каждой строки основного запроса.

select 
    player.short_name,
    player.club,
    player.overall,
    (select avg(overall)
     from fifa_players_2018 sub
     where sub.club = player.club) as avg_club_rating
from 
    fifa_players_2018 player
order by 
    player.overall desc
limit 5

В этом запросе для каждого игрока мы вычисляем средний рейтинг его клуба. Обратите внимание на условие WHERE sub.club = player.club - здесь подзапрос использует значение club из внешнего запроса, что и делает его коррелированным.

Важно помнить, что такие подзапросы могут работать медленнее обычных, так как выполняются для каждой строки отдельно. В большинстве случаев их можно заменить на JOIN для лучшей производительности.