Предположим, у меня есть таблица Table1 с атрибутами id, Name, Address, Salary. Теперь я пишу следующий запрос:Как СУБД решает следующий запрос?
SELECT * FROM Table1 WHERE 2*Salary > (SELECT MAX(Salary) FROM Table1)
Очевидно, что запрос
SELECT MAX(Salary) FROM Table1
будет производить тот же результат для каждой строки в Table1. Так СУБД выполняет этот запрос агрегации один раз для каждой строки или выполняет его один раз и сохраняет значение, которое нужно сравнить с каждой строкой? Если да, то как СУБД решают, что результат этого запроса не зависит от строк в таблице1?
Потому что мне было интересно, что выполнение его один раз для каждой строки будет крайне неэффективным.
Ваш подзапрос не коррелирован. Поэтому он будет рассчитан один раз. –
решает, что результаты независимы, поскольку они не относятся к каким-либо таблицам из внешнего запроса. –