Последовательность понял правильно. Молодец!
1. WHERE -> 2. GROUP BY -> 3. HAVING -> 4. ORDER BY
Т.е. сначала фильтруем - получаем тот набор кортежей, с которыми будем работать дальше.
Затем группируем в нужном разрезе.
Затем накладываем условие на результат группировки (а условие на результат можно наложить только после получения результата). Затем сортируем полученный результат для возвращения клиенту.
Никаких временных таблиц не создается (привет любителям materialize). Порядок выполнения определяется планом запроса и он в общем случае может сильно отличаться от структуры текста запроса.
Теперь можно разбираться последовательностью выполнения в иерархических запросах (connect by).