@nevro
не пойми кто

Какая последовательность выполнения у group by, having, order by?

Какая последовательность?
1. FROM -> 2. WHERE -> 3. GROUP BY -> 4. HAVING -> 5. ORDER BY?
И на каждом этапе создается что-то вроде временной таблицы? Т.е. having уже оперирует над массивом данных, отфильтрованным gropu by? Я к чему спрашиваю: раньше по поводу sql в голове была каша (что выполняется сразу все и одновременно:)), сейчас, начиная осознавать его последовательность и структурированность, легче составлять сложные запросы. Но еще не до конца.
  • Вопрос задан
  • 12371 просмотр
Решения вопроса 2
MaxDukov
@MaxDukov
впишусь в проект как SRE/DevOps.
FROM clause
WHERE clause
SELECT clause
GROUP BY clause
HAVING clause
ORDER BY clause
Ответ написан
@Oraclist
Последовательность понял правильно. Молодец!
1. WHERE -> 2. GROUP BY -> 3. HAVING -> 4. ORDER BY
Т.е. сначала фильтруем - получаем тот набор кортежей, с которыми будем работать дальше.
Затем группируем в нужном разрезе.
Затем накладываем условие на результат группировки (а условие на результат можно наложить только после получения результата). Затем сортируем полученный результат для возвращения клиенту.
Никаких временных таблиц не создается (привет любителям materialize). Порядок выполнения определяется планом запроса и он в общем случае может сильно отличаться от структуры текста запроса.

Теперь можно разбираться последовательностью выполнения в иерархических запросах (connect by).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы