Логика SQL довольно простая и научиться этому языку несложно. Но все же есть несколько моментов, осложняющих понимание того, как выполняется запрос. В данной мини-статье, разговор о порядке выполнения запроса.
По интернету гуляет такая картинка:
Но почему-то за очевидностью происходящего, скрывается смысл, который лучше написать текстом.
Так, полный порядок выполнения запросов будет выглядеть следующим образом:
- FROM (выбор таблицы)
- JOIN (комбинация с подходящими по условию данными из других таблиц)
- WHERE (фильтрация строк)
- GROUP BY (агрегирование данных)
- HAVING (фильтрация агрегированных данных)
- SELECT (возврат результирующего датасета)
- ORDER BY (сортировка).
И это дает нам понимание, что с выбора таблицы (или ее формирования), запросом FROM мы подаем на вход некий массив данных. Этот массив может быть передан как подзапросом, так и отдельной таблицей, сделанной с помощью WITH. В любом случае, самый первый запрос, подает на вход нам массив, который мы будем потом обрабатывать.